joelau 发表于 2020-4-3 15:05:31

关于python中类__del__的疑惑

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

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

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


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

      
while True:
    num = int(input("要定义多少个变量:"))
    i = 0
    list1 =[]
    while i<num:
      a = A()
      list1.append(a)
      i = i+1

    print(A.num)
    print(list1)


一个账号 发表于 2020-4-3 16:45:09

本帖最后由 一个账号 于 2020-4-3 16:46 编辑

你的那个 a 还在呢,改成这样:

class A:
    num = 0
   
    def __init__(self):
      A.num = A.num +1


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

i = 0
list1 =[]
while i<1:   
    a = A()
    list1.append(a)
    i = i+1

print(A.num)
print(list1)


del a
del list1
print(A.num)
print(list1)

zltzlt 发表于 2020-4-3 17:44:19

你没有删掉 a

class A:
    num = 0

    def __init__(self):
      A.num = A.num + 1

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


i = 0
list1 = []
while i < 1:
    a = A()
    list1.append(a)
    i = i + 1

print(A.num)
print(list1)

del list1
del a
print(A.num)
print(list1)

joelau 发表于 2020-4-7 10:08:39

一个账号 发表于 2020-4-3 16:45
你的那个 a 还在呢,改成这样:

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


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

      
while True:
    num = int(input("要定义多少个变量:"))
    i = 0
    list1 =[]
    while i<num:
      a = A()
      list1.append(a)
      i = i+1

    print(A.num)
    print(list1)

joelau 发表于 2020-4-7 10:09:43

zltzlt 发表于 2020-4-3 17:44
你没有删掉 a

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


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

      
while True:
    num = int(input("要定义多少个变量:"))
    i = 0
    list1 =[]
    while i<num:
      a = A()
      list1.append(a)
      i = i+1

    print(A.num)
    print(list1)

TJBEST 发表于 2020-4-7 10:18:42

本帖最后由 TJBEST 于 2020-4-7 10:21 编辑

触发析构函数必须 满足 没有任何名称指向该对象所在内存,很明显A还在呢?你改成这样
class A:
    num = 0
   
    def __init__(self):
      A.num = A.num +1


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

i = 0
list1 =[]
while i<1:   
    a = A()
    list1.append(a)
    i = i+1

print(A.num)
print(list1)

del a,list1
print(A.num)
print(list1)
再试试吧

joelau 发表于 2020-4-7 10:20:54

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

再试试吧

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


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

      
while True:
    num = int(input("要定义多少个变量:"))
    i = 0
    list1 =[]
    while i<num:
      a = A()
      list1.append(a)
      i = i+1

    print(A.num)
    print(list1)

TJBEST 发表于 2020-4-7 10:22:34

joelau 发表于 2020-4-7 10:20
我现在想问这样怎么改

改成这样,如何,list加入后删掉a不就完了
class A:
    num = 0
   
    def __init__(self):
      A.num = A.num +1


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

i = 0
list1 =[]
while i<1:   
    a = A()
    list1.append(a)
    del a
    i = i+1

print(A.num)
print(list1)

del list1
print(A.num)
print(list1)

joelau 发表于 2020-4-7 10:35:46

行了我改完了改成这样子就没问题了谢谢上面的TJBEST给我的启示class A:
    num = 0
   
    def __init__(self):
      A.num = A.num +1


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

list1 =[]
while True:
    num = int(input("要定义多少个变量:"))
    i = 0
    while i<num:
      a = A()
      list1.append(a)
      del a
      i = i+1

    print(A.num)
    print(list1)

    num = int(input("要销毁多少个变量:"))
    if num > len(list1):
      print("没有这么多个变量,最多%d个" %(len(list1)))
      continue
    i = 0
    while i < num:
      del list1
      i = i+1
   

    print(list1)
    print(A.num)

joelau 发表于 2020-4-7 10:36:33

为什么不能我自己是最佳答案明明我自己帮自己解决了{:5_104:}

joelau 发表于 2020-4-7 10:38:45

TJBEST 发表于 2020-4-7 10:22
改成这样,如何,list加入后删掉a不就完了

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


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

list1 =[]
while True:
    num = int(input("要定义多少个变量:"))
    i = 0
    while i<num:
      a = A()
      list1.append(a)
      del a
      i = i+1

    print(A.num)
    print(list1)

    num = int(input("要销毁多少个变量:"))
    if num > len(list1):
      print("没有这么多个变量,最多%d个" %(len(list1)))
      continue
    i = 0
    while i < num:
      del list1
      i = i+1
   

    print(list1)
    print(A.num)

TJBEST 发表于 2020-4-7 11:22:53

joelau 发表于 2020-4-7 10:38
改成这样也行吧

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


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

list1 =[]
while True:
    num = int(input("要定义多少个变量:"))
    i = 0
    while i<num:
      a = A()
      list1.append(a)
      del a
      i = i+1

    print(A.num)
    print(list1)

    num = int(input("要销毁多少个变量:"))
    if num > len(list1):
      print("没有这么多个变量,最多%d个" %(len(list1)))
      continue
    i = 0
    while i < num:
      del list1
      i = i+1
    print(list1)
    print(A.num)
    list1.clear()

joelau 发表于 2020-4-7 11:38:57

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

我就是不想让它为空看看效果啊

joelau 发表于 2020-4-7 11:39:28

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

就算不为空效果也是可以的

XiaoPaiShen 发表于 2020-4-7 11:43:32

joelau 发表于 2020-4-7 10:36
为什么不能我自己是最佳答案明明我自己帮自己解决了

你要选择对你帮助最大的,别人的答案为最佳答案,也好结贴
页: [1]
查看完整版本: 关于python中类__del__的疑惑