类和对象:跟踪有多少实力被创建
在学习类和对象相关章节,有一个练习题:请动手在一个类中定义一个变量,用于跟踪该类有多少个实例被创建。
(当实例化一个对象,这个变量+1,当销毁一个对象,这个变量自动-1)
class C:
count = 0
def __init__(self):
C.count += 1
def __del__(self):
C.count -= 1
我不太明白调用一次count就会+1,请大佬解答! __init__函数啊,每创建一个实例,count就加1 类实例化对象的时候,会自动调用__init__()方法,销毁的时候会自动调用__del__()方法。具体请看测试
>>> class C:
count=0
def __init__(self):
C.count+=1
print('实例化了1个对象')
def __del__(self):
C.count-=1
print('销毁了1个对象')
>>> a = C()
实例化了1个对象
>>> del a
销毁了1个对象
>>>
类实例化对象的时会自动调用 __init__() 方法,这个方法也称为构造函数
然后我们搞清楚类变量、实例变量的区别就比较好理解了
类变量是所有这个类对象所共用的,假设这里创建 a = C() 、b = C() 这两个实例
他们是共享一个类变量 count 的,所以这里创建了两个实例对象 a 、 b 使得自动调用两次 __init__ 函数
那么 count 的值就一共增加了 2 次
Twilight6 发表于 2020-11-25 17:52
类实例化对象的时会自动调用 __init__() 方法,这个方法也称为构造函数
然后我们搞清楚类变量、实例 ...
答主您好,我在看课堂笔记的时候发现了这么一个代码案例:
>>> class DD():
count = 0
>>> a = DD()
>>> b = DD()
>>> DD.count
0
>>> a.count
0
>>> b.count
0
>>> a.count += 10
>>> a.count
10
>>> b.count
0
>>> DD.count
0
在这个题目里,count是类变量吧?
那么a.count就是实例变量嘛?
为什么a.count += 10之后,并没有对DD.count产生影响呀?
我不明白这个例子跟上面的例子中,count += 有什么区别,还请大佬解答一下!非常感谢! CarterZhang 发表于 2020-11-25 21:03
答主您好,我在看课堂笔记的时候发现了这么一个代码案例:
>>> class DD():
count = 0
__dict__ 可以查看类中拥有的属性,然后看下面的代码:
class D:
count = 0
a = D()
print(a.count)
print(a.__dict__)
a.count += 10
print(a.__dict__)
输出结果:
0
{}
{'count': 10}
这里 a.count += 10 赋值相当于 self.count = D.count + 10 赋值了个实例变量来覆盖了类变量
Twilight6 发表于 2020-11-25 21:22
__dict__ 可以查看类中拥有的属性,然后看下面的代码:
感谢答主!已经明白!
页:
[1]