📜  Python :__delete__ vs __del__

📅  最后修改于: 2022-05-13 01:54:21.685000             🧑  作者: Mango

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__