练习|学习笔记

简介: 快速学习练习

开发者学堂课程【Python 入门 2020年版练习4】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/639/detail/10384


练习


内容介绍:

一、通过 init 方法计数 

二、通过 new 方法计数

三、优化 

 

一、通过 init 方法计数

# 定义—个类属性,记录通过这个类创建了多少个对象

Class Person(object):

count = 0 

def  init (self,name,age):

Person.count += 1

self.name = name

self.age = age 

# 每次创建对象,都会调用 new 和 init 方法

p1 = Person(‘张三’,18)

p2 = Person( '李四",19)

p3 = Person( ‘jack’, 20)

print(Persort.count)

创建 p1、p2、p3三个对象,每次创建对象,都会调用 new  init 方法,在 init 下添加 Person.count += 1每次调用时count 都会加一,即可实现计数。 

 

二、通过 new 方法计数

Class Person(object):

count = 0

def  new (cls, *args,**kwargs):

cls.count += 1

x = object. new (cls) # 申请内存,创建一个对象,并设置类型是 Person 类

return x

def _init_(self,name,age) :

# Person .count += 1

self.name = name

self.age = age

# 每次创建对象,都会调用 new  init 方法

# 调用 new 方法,用来申请内存

# 如果不重写 new 方法,它会自动找 object 的 new 

# object 的 new 方法,默认实现是申请了一段内存,创建一个对象 

p1 = Person(‘张三’,18)

p2 = Person(‘李四’,19)

p3 = Person( ‘jack’ , 20)

print(p1,p2,p3)

p4 = object. new (Person)  # 申请了内存,创建了一个对象,被设置它的类型是 Person

p4. init ( ‘tony’ , 23)

print(p4)

每次创建对象都会调用 new  init 方法,调用 new 方法用来申请内存,如果不重写 new 方法,它会自动找 object 的 new  object 的 new 方法,默认实现是申请了一段内存,创建一个对象。如果想要创建一个对象还可以用p4的方法。

 new 方法里加入 cls.count += 1即可实现计数。 

 

三、优化

class Person(object):

count = 0  # 类属性 

def _new_(cls,*args,**kwargs):

cls. count += 1

x = object._new_(cls)  # 申请内存,创建一个对象,并设置类型是 Person类

return x

def  init_(self,name,age):

# Person.count += 1

self.name = name

self.age = age

@classmethod

def get_count(cls):

return cls. count

p1 = Person(‘张三’,18)

p2 = Person(‘李四’,19

p3 = Person( ‘jack’ , 20)

print(p1, p2,p3)

print(Person.get_count())

目前的代码 count 可以被在外部改变,将 count 重命名为 count 变为私有属性。 

外部想访问可以创建一个类方法 def get_count(cls):

相关文章
|
存储 监控 Kubernetes
『Skywalking』.NET Core快速接入分布式链路追踪平台
📣读完这篇文章里你能收获到 - .NET Core接入Skywalking - 了解Skywalking的整体架构设计 - 了解Skywalking的各项技术指标怎么看 - 生产部署时的坑全跳过 - 感谢点赞+收藏,避免下次找不到~
1311 1
『Skywalking』.NET Core快速接入分布式链路追踪平台
|
Java Linux Shell
Docker centos7 中文乱问题解决方案
Docker centos7 中文乱问题解决方案
930 0
|
C++ 开发者
C++程序命名空间
C++程序命名空间
79 1
|
Ubuntu
ubuntu 安装 virt-manager 虚拟机
ubuntu 安装 virt-manager 虚拟机
695 1
|
Python
如何在Python中处理异常?给出try-except-finally语句的例子。
在Python中,异常处理通过try-except-finally结构实现。try包含可能抛出异常的代码,except捕获特定异常并处理,finally则确保无论是否发生异常,某些代码(如资源释放)总会执行。
137 1
【错题集-编程题】字母收集(动态规划 - 路径问题)
【错题集-编程题】字母收集(动态规划 - 路径问题)
|
人工智能 数据挖掘 Python
《三国演义》人物数据分析
由于要分析120回中主要人物的出场次数,爬取《三国演义》120回,每回放在一个段落里;len(f.readlines()) = 120.
|
Cloud Native Go C++
你以为传切片就是传引用了吗?
你以为传切片就是传引用了吗?
145 0
|
前端开发
前端学习笔记202305学习笔记第二十三天-重构菜单组件2
前端学习笔记202305学习笔记第二十三天-重构菜单组件2
86 1