【发布时间】:2021-05-27 01:28:21
【问题描述】:
我的目的如下: 如果创建了新实例,则必须将该实例添加到静态列表中。并且当一个创建的实例被删除时,它必须从静态列表中删除
而finalizer方法,必须使用'del()'。
我遇到问题的python代码如下:
class Staff:
staffs = [] # static customer list
def __init__(self, name):
self.name = name
print("A staff is created!")
def __del__(self):
Staff.staffs.remove(self)
print("A staff is deleted!")
if __name__ == '__main__':
# create a staff
Staff.staffs.append(Staff("Harry"))
# delete a staff
Staff.staffs[0].__del__()
错误如下:
异常被忽略:
Traceback(最近一次调用最后一次): del 中的文件“(Path)\temp.py”,第 11 行 Staff.staffs.remove(self)
ValueError: list.remove(x): x 不在列表中
我可以检查创建的实例是否存在于静态列表中,如下面的代码
def check(self):
print("Length of Static List:", len(Staff.staffs))
print("self", self)
for a_staff in Staff.staffs:
if a_staff == self:
print("a_staff", a_staff)
print()
结果:
静态列表长度:1
self main.Staff 对象位于 0x000001FF7506CFD0>
a_staff main.Staff 对象位于 0x000001FF7506CFD0>
实例的内存地址完全一样,但不知道为什么解释器说静态列表中没有实例。
当我在 Java 中运行类似的代码时没有问题。
为什么会出现错误?
【问题讨论】:
-
你想要完成什么?将 Staff 对象的实例保存在列表中,然后在删除实例时将其从列表中删除?
-
@DanielButler 感谢您的回答!是的,没错。如果创建了新实例,则必须将该实例添加到静态列表中。并且当一个创建的实例被删除时,它必须从静态列表中删除。