关于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: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) 你没有删掉 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) 一个账号 发表于 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) 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: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)
再试试吧 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) 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) 行了我改完了改成这样子就没问题了谢谢上面的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)
为什么不能我自己是最佳答案明明我自己帮自己解决了{:5_104:} 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)
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() TJBEST 发表于 2020-4-7 11:22
这样你每次循环 删除后 列表不为空,那么会影响后面的。我改了一下,不会对下次循环有影响。如果可以你点 ...
我就是不想让它为空看看效果啊 TJBEST 发表于 2020-4-7 11:22
这样你每次循环 删除后 列表不为空,那么会影响后面的。我改了一下,不会对下次循环有影响。如果可以你点 ...
就算不为空效果也是可以的 joelau 发表于 2020-4-7 10:36
为什么不能我自己是最佳答案明明我自己帮自己解决了
你要选择对你帮助最大的,别人的答案为最佳答案,也好结贴
页:
[1]