Python :__delete__ vs __del__
__delete__
和__del__
都是Python中的 dunder 或魔术方法。 Python中的Dunder或magic方法是方法名称中具有两个前缀和后缀下划线的方法。 Dunder在这里的意思是“双下(下划线)”。这些通常用于运算符重载。
__删除__
__del__
是一种析构方法,一旦对象的所有引用被删除,即当对象被垃圾回收时,就会调用该方法。
句法:
def __del__(self):
body of destructor
.
.
示例:这是析构函数的简单示例。通过使用 del 关键字,我们删除了对象 'obj' 的所有引用,因此自动调用了析构函数。
# Python program to demonstrate
# __del__
class Example:
# Initializing
def __init__(self):
print("Example Instance.")
# Calling destructor
def __del__(self):
print("Destructor called, Example deleted.")
obj = Example()
del obj
输出:
Example Instance.
Destructor called, Example deleted.
注意:析构函数是在程序结束或对象的所有引用都被删除时调用的,即引用计数变为零时调用,而不是在对象超出范围时调用。
__删除__
__delete__
用于删除实例的属性,即删除实例所有者类中存在的属性值。
注意:此方法仅删除作为描述符的属性。
句法:
def __delete__(self, instance):
body of delete
.
.
例子:
# Python program to demonstrate
# __delete__
class Example(object):
# Initializing
def __init__(self):
print("Example Instance.")
# Calling __delete__
def __delete__(self, instance):
print ("Deleted in Example object.")
# Creating object of Example
# class as an descriptor attribute
# of this class
class Foo(object):
exp = Example()
# Driver's code
f = Foo()
del f.exp
输出:
Example Instance.
Deleted in Example object.
__delete 和 __del__ 之间的区别
示例: __del__
和__delete__
的组合示例。
# Python program to demonstrate
# __del__ and __delete__
class Example(object):
# Initializing
def __init__(self):
self.value = ''
# deletes an attribute
def __delete__(self, instance):
print ("Inside __delete__")
# Destructor
def __del__(self):
print("Inside __del__")
class Foo(object):
exp = Example()
# Driver's code
f = Foo()
del f.exp
输出:
Inside __delete__
Inside __del__