鱼C论坛

 找回密码
 立即注册
查看: 1618|回复: 14

[已解决]关于python中类__del__的疑惑

[复制链接]
发表于 2020-4-3 15:05:31 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 joelau 于 2020-4-7 11:46 编辑

在小甲鱼的[课后作业] 第039讲:类和对象:拾遗中的动动手第一题
我想使用列表来存储我新建的实例对象
再使用del方法进行删除

改成这样我就不会销毁了
求大家看看
  1. class A:
  2.     num = 0
  3.    
  4.     def __init__(self):
  5.         A.num = A.num +1


  6.     def __del__(self):
  7.         A.num = A.num - 1

  8.       
  9. while True:
  10.     num = int(input("要定义多少个变量:"))
  11.     i = 0
  12.     list1 =[]
  13.     while i<num:
  14.         a = A()
  15.         list1.append(a)
  16.         i = i+1

  17.     print(A.num)
  18.     print(list1)
复制代码



最佳答案
2020-4-7 11:22:53
joelau 发表于 2020-4-7 10:38
改成这样也行吧

这样你每次循环 删除后 列表不为空,那么会影响后面的。我改了一下,不会对下次循环有影响。如果可以你点个采纳吧。
  1. class A:
  2.     num = 0
  3.    
  4.     def __init__(self):
  5.         A.num = A.num +1


  6.     def __del__(self):
  7.         A.num = A.num - 1

  8. list1 =[]
  9. while True:
  10.     num = int(input("要定义多少个变量:"))
  11.     i = 0
  12.     while i<num:
  13.         a = A()
  14.         list1.append(a)
  15.         del a
  16.         i = i+1

  17.     print(A.num)
  18.     print(list1)

  19.     num = int(input("要销毁多少个变量:"))
  20.     if num > len(list1):
  21.         print("没有这么多个变量,最多%d个" %(len(list1)))
  22.         continue
  23.     i = 0
  24.     while i < num:
  25.         del list1[0]
  26.         i = i+1
  27.     print(list1)
  28.     print(A.num)
  29.     list1.clear()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-4-7 10:08:39 | 显示全部楼层
一个账号 发表于 2020-4-3 16:45
你的那个 a 还在呢,改成这样:

如果改成这样下面还怎么销毁啊
  1. class A:
  2.     num = 0
  3.    
  4.     def __init__(self):
  5.         A.num = A.num +1


  6.     def __del__(self):
  7.         A.num = A.num - 1

  8.       
  9. while True:
  10.     num = int(input("要定义多少个变量:"))
  11.     i = 0
  12.     list1 =[]
  13.     while i<num:
  14.         a = A()
  15.         list1.append(a)
  16.         i = i+1

  17.     print(A.num)
  18.     print(list1)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-7 10:09:43 | 显示全部楼层

如果改成这样那怎么销毁啊
  1. class A:
  2.     num = 0
  3.    
  4.     def __init__(self):
  5.         A.num = A.num +1


  6.     def __del__(self):
  7.         A.num = A.num - 1

  8.       
  9. while True:
  10.     num = int(input("要定义多少个变量:"))
  11.     i = 0
  12.     list1 =[]
  13.     while i<num:
  14.         a = A()
  15.         list1.append(a)
  16.         i = i+1

  17.     print(A.num)
  18.     print(list1)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-7 10:20:54 | 显示全部楼层
TJBEST 发表于 2020-4-7 10:18
触发析构函数必须 满足 没有任何名称指向该对象所在内存,很明显A还在呢?你改成这样

再试试吧

我现在想问这样怎么改
  1. class A:
  2.     num = 0
  3.    
  4.     def __init__(self):
  5.         A.num = A.num +1


  6.     def __del__(self):
  7.         A.num = A.num - 1

  8.       
  9. while True:
  10.     num = int(input("要定义多少个变量:"))
  11.     i = 0
  12.     list1 =[]
  13.     while i<num:
  14.         a = A()
  15.         list1.append(a)
  16.         i = i+1

  17.     print(A.num)
  18.     print(list1)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-7 10:35:46 | 显示全部楼层
行了我改完了改成这样子就没问题了谢谢上面的TJBEST给我的启示
  1. class A:
  2.     num = 0
  3.    
  4.     def __init__(self):
  5.         A.num = A.num +1


  6.     def __del__(self):
  7.         A.num = A.num - 1

  8. list1 =[]
  9. while True:
  10.     num = int(input("要定义多少个变量:"))
  11.     i = 0
  12.     while i<num:
  13.         a = A()
  14.         list1.append(a)
  15.         del a
  16.         i = i+1

  17.     print(A.num)
  18.     print(list1)

  19.     num = int(input("要销毁多少个变量:"))
  20.     if num > len(list1):
  21.         print("没有这么多个变量,最多%d个" %(len(list1)))
  22.         continue
  23.     i = 0
  24.     while i < num:
  25.         del list1[0]
  26.         i = i+1
  27.      

  28.     print(list1)
  29.     print(A.num)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-7 10:36:33 | 显示全部楼层
为什么不能我自己是最佳答案明明我自己帮自己解决了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-7 10:38:45 | 显示全部楼层
TJBEST 发表于 2020-4-7 10:22
改成这样,如何,list加入后删掉a不就完了

改成这样也行吧
  1. class A:
  2.     num = 0
  3.    
  4.     def __init__(self):
  5.         A.num = A.num +1


  6.     def __del__(self):
  7.         A.num = A.num - 1

  8. list1 =[]
  9. while True:
  10.     num = int(input("要定义多少个变量:"))
  11.     i = 0
  12.     while i<num:
  13.         a = A()
  14.         list1.append(a)
  15.         del a
  16.         i = i+1

  17.     print(A.num)
  18.     print(list1)

  19.     num = int(input("要销毁多少个变量:"))
  20.     if num > len(list1):
  21.         print("没有这么多个变量,最多%d个" %(len(list1)))
  22.         continue
  23.     i = 0
  24.     while i < num:
  25.         del list1[0]
  26.         i = i+1
  27.      

  28.     print(list1)
  29.     print(A.num)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-7 11:38:57 | 显示全部楼层
TJBEST 发表于 2020-4-7 11:22
这样你每次循环 删除后 列表不为空,那么会影响后面的。我改了一下,不会对下次循环有影响。如果可以你点 ...

我就是不想让它为空看看效果啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-7 11:39:28 | 显示全部楼层
TJBEST 发表于 2020-4-7 11:22
这样你每次循环 删除后 列表不为空,那么会影响后面的。我改了一下,不会对下次循环有影响。如果可以你点 ...

就算不为空效果也是可以的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-20 03:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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