鱼C论坛

 找回密码
 立即注册
查看: 1852|回复: 6

[已解决]类和对象:跟踪有多少实力被创建

[复制链接]
发表于 2020-11-25 17:06:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

class C:
        count = 0

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

我不太明白调用一次count就会+1,请大佬解答!
最佳答案
2020-11-25 17:52:18


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

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

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

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

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-25 17:28:05 | 显示全部楼层
__init__函数啊,每创建一个实例,count就加1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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个对象
>>> 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-25 17:52:18 | 显示全部楼层    本楼为最佳答案   


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

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

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

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

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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 += 有什么区别,还请大佬解答一下!非常感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-25 21:35:02 | 显示全部楼层
Twilight6 发表于 2020-11-25 21:22
__dict__ 可以查看类中拥有的属性,然后看下面的代码:

感谢答主!已经明白!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-17 07:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表