开发者学堂课程【Python 入门 2020年版:练习4】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/639/detail/10384
练习
内容介绍:
一、通过 init 方法计数
二、通过 new 方法计数
三、优化
一、通过 init 方法计数
# 定义—个类属性,记录通过这个类创建了多少个对象
C
lass 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):。