鱼C论坛

 找回密码
 立即注册
查看: 1663|回复: 5

[已解决]关于类属性的问题

[复制链接]
发表于 2018-6-30 21:52:18 | 显示全部楼层 |阅读模式
2鱼币
class C:
        count = 0
        
        def __init__(self):
                C.count += 1

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

>>> a = C()
>>> b = C()
>>> c = C()
>>> C.count
3
>>> del a
>>> C.count
2
>>> del b, c
>>> C.count
0

代码没有看太懂

问题1:当类实例化后,那么init方法应该自动被调用,C.count为类属性,是否为当类实例化一个对象时,init 方法就会被调用一次,C.count的值就依次递增?
问题2: __del__(self): 这个也是魔法方法吗,没看懂?
最佳答案
2018-6-30 21:52:19
当你实例化一个对象时,__init__执行,此时操作的是类C的属性,而不是self.count+=1,所以你每次实例化一个对象时count都会+1,__del__是魔法方法,当你销毁一个实例对象时执行,此时操作的还是类的count属性,希望能对你有所帮助。

最佳答案

查看完整内容

当你实例化一个对象时,__init__执行,此时操作的是类C的属性,而不是self.count+=1,所以你每次实例化一个对象时count都会+1,__del__是魔法方法,当你销毁一个实例对象时执行,此时操作的还是类的count属性,希望能对你有所帮助。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-6-30 21:52:19 | 显示全部楼层    本楼为最佳答案   
当你实例化一个对象时,__init__执行,此时操作的是类C的属性,而不是self.count+=1,所以你每次实例化一个对象时count都会+1,__del__是魔法方法,当你销毁一个实例对象时执行,此时操作的还是类的count属性,希望能对你有所帮助。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-6-30 22:13:01 | 显示全部楼层
你的理解没有问题
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-7-1 00:11:51 | 显示全部楼层
理解有点偏差,应该这样说,__new__方法才是实例化对象时调用的,__init__是初始化对象属性时调用的,先调用__new__。。。注意实例化对象和初始化对象属性是不同的阶段
__del__是销毁对象时调用的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-7-1 01:04:34 | 显示全部楼层
我的理解是count是类属性,类的实例化对象的方法里可以改变类属性,类属性永远的类的属性,不会变成实例化对象的属性,可以C.count,但不可以a.count
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-7-1 01:06:10 | 显示全部楼层
然后,以__开头,__结尾的都是魔法方法
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-23 03:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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