该方法__del__不能与__new__python 中的方法一起使用,但单独使用时效果很好。那些。我会注释掉__new__,__del__它有效,我激活它 -__new__它有效,__del__不。
class House:
houses_history = []
def __new__(cls, *args, **kwargs):
cls.houses_history.append(args[0])
def __init__(self, name, number_of_floors):
self.name = name
self.number_of_floors = number_of_floors
def __del__(self):
print(f'{self.name} снесён, но он останется в истории')
h1 = House('ЖК Эльбрус', 10)
print(House.houses_history)
h2 = House('ЖК Акация', 20)
print(House.houses_history)
h3 = House('ЖК Матрёшки', 20)
print(House.houses_history)
# Удаление объектов
del h2
del h3
print(House.houses_history)
如何修复它?
您的对象根本没有创建(因为您的重写对象
__new__不返回任何内容,因此返回None),因此没有任何内容可以删除。为了确保它们没有被创建,print显示变量的内容就足够了h1,h2-h3它将在那里None(你__new__返回的内容被写入变量中)。为了使代码正常工作,您需要调用原始代码
__new__:结论:
一般来说,该操作符
del不会强制删除对象,而只是释放指定的变量(从而使对象的引用计数减1)。如果该对象保存在其他地方,则不会被删除并且__del__不起作用。__del__只有在程序结束时,所有对象都被删除时,一切才肯定会起作用(这就是为什么我们在最后看到“厄尔布鲁士住宅区”被删除,尽管del我们没有调用它)。使用new重要吗?原则上,你可以通过初始化器添加它,结果看起来是一样的还是我错了?