CarterZhang 发表于 2020-11-25 17:06:18

类和对象:跟踪有多少实力被创建

在学习类和对象相关章节,有一个练习题:
请动手在一个类中定义一个变量,用于跟踪该类有多少个实例被创建。
(当实例化一个对象,这个变量+1,当销毁一个对象,这个变量自动-1)

class C:
        count = 0

        def __init__(self):
                C.count += 1
        def __del__(self):
                C.count -= 1

我不太明白调用一次count就会+1,请大佬解答!

西瓜味的苹果 发表于 2020-11-25 17:28:05

__init__函数啊,每创建一个实例,count就加1

笨鸟学飞 发表于 2020-11-25 17:32:45

类实例化对象的时候,会自动调用__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个对象
>>>

Twilight6 发表于 2020-11-25 17:52:18



类实例化对象的时会自动调用 __init__() 方法,这个方法也称为构造函数

然后我们搞清楚类变量、实例变量的区别就比较好理解了

类变量是所有这个类对象所共用的,假设这里创建 a = C() 、b = C() 这两个实例

他们是共享一个类变量 count 的,所以这里创建了两个实例对象 a 、 b 使得自动调用两次 __init__ 函数

那么 count 的值就一共增加了 2 次

CarterZhang 发表于 2020-11-25 21:03:34

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 += 有什么区别,还请大佬解答一下!非常感谢!

Twilight6 发表于 2020-11-25 21:22:10

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 赋值了个实例变量来覆盖了类变量

CarterZhang 发表于 2020-11-25 21:35:02

Twilight6 发表于 2020-11-25 21:22
__dict__ 可以查看类中拥有的属性,然后看下面的代码:




感谢答主!已经明白!
页: [1]
查看完整版本: 类和对象:跟踪有多少实力被创建