鱼C论坛

 找回密码
 立即注册
查看: 1288|回复: 3

__del__ 用法

[复制链接]
发表于 2018-2-1 14:30:21 | 显示全部楼层 |阅读模式

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

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

x
  1. class NewClass(object):  
  2.     num_count =  0
  3.     def __init__(self,name):  
  4.         self.name = name  
  5. <font color="#ff0000">        self.__class__.num_count</font> += 1  
  6.         print name,NewClass.num_count  
  7.     def __del__(self):  
  8. <font color="#ff0000">        self.__class__.num_count</font> -= 1  
  9.         print "Del",self.name,<font color="#ff0000">self.__class__.num_count</font>  
  10.     def test():  
  11.         print "aa"  
  12.   
  13. aa = NewClass("Hello")  
  14. bb = NewClass("World")  
  15. cc = NewClass("aaaa")  
  16.   
  17. print "Over"  
复制代码
输出结果:
  1. Hello 1  
  2. World 2  
  3. aaaa 3  
  4. Over  
  5. Del Hello 2  
  6. Del World 1  
  7. Del aaaa 0  
复制代码
为什么把NewClass 换成 self.__class__. 就可以直接输出del的结果,没换的话会报错 Exception AttributeError: "'NoneType' object has no attribute 'num_count'" in <bound method NewClass.__del__ of <__main__.NewClass object at 0x01AF1970>> ignored
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-2-1 15:05:13 From FishC Mobile | 显示全部楼层

回帖奖励 +3 鱼币

因为这个变量是属于__class__的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-1 15:22:05 | 显示全部楼层
BngThea 发表于 2018-2-1 15:05
因为这个变量是属于__class__的

意思是他从原来指向实例变成指向一开始的静态变量么?

还是不理解为什么del可以执行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-1 15:24:23 | 显示全部楼层
lolykong 发表于 2018-2-1 15:22
意思是他从原来指向实例变成指向一开始的静态变量么?

还是不理解为什么del可以执行

代码可能有点乱
  1. class NewClass(object):  
  2. 04.    num_count = 0
  3. 05.    def __init__(self,name):  
  4. 06.        self.name = name  
  5. 07.        self.__class__.num_count += 1  
  6. 08.        print name,NewClass.num_count  
  7. 09.    def __del__(self):  
  8. 10.        self.__class__.num_count -= 1  
  9. 11.        print "Del",self.name,self.__class__.num_count  
  10. 12.    def test():  
  11. 13.        print "aa"  
  12. 14.  
  13. 15.aa = NewClass("Hello")  
  14. 16.bb = NewClass("World")  
  15. 17.cc = NewClass("aaaa")  
  16. 18.  
  17. 19.print "Over"  
复制代码
  1. Hello 1  
  2. 02.World 2  
  3. 03.aaaa 3  
  4. 04.Over  
  5. 05.Del Hello 2  
  6. 06.Del World 1  
  7. 07.Del aaaa 0
复制代码




小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-27 16:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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