>  기사  >  백엔드 개발  >  Python의 소멸자에 대한 자세한 설명

Python의 소멸자에 대한 자세한 설명

藏色散人
藏色散人원래의
2019-04-01 14:28:169230검색

객체가 파괴되면 소멸자가 호출됩니다. Python에서는 메모리 관리를 자동으로 처리하는 가비지 수집기가 있기 때문에 C++에서처럼 소멸자가 필요하지 않습니다. __del__() 메서드는 Python에서 소멸자 메서드라고 합니다. 이 함수는 객체에 대한 모든 참조가 제거될 때, 즉 객체가 가비지 수집될 때 호출됩니다.

소멸자 선언 구문:

def __del__(self):
  # body of destructor

예제 1: 다음은 소멸자의 간단한 예입니다. 소멸자는 del 키워드를 사용하여 "obj" 개체에 대한 모든 참조를 제거하여 자동으로 호출됩니다.

# Python program to illustrate destructor 
class Employee: 
  
    # Initializing 
    def __init__(self): 
        print('Employee created.') 
  
    # Deleting (Calling destructor) 
    def __del__(self): 
        print('Destructor called, Employee deleted.') 
  
obj = Employee() 
del obj

출력:

Employee created.
Destructor called, Employee deleted.

참고: 소멸자는 프로그램이 종료된 후 또는 객체에 대한 모든 참조가 삭제된 후에 호출됩니다. 객체가 범위를 벗어날 때가 아니라 참조 횟수가 0에 도달할 때입니다.

예 2: 이 예에서는 위에서 언급한 고려 사항을 설명합니다. 여기서 소멸자는 "Program End..."가 인쇄된 후에 호출된다는 점에 유의하세요.

# Python program to illustrate destructor 
  
class Employee: 
  
    # Initializing  
    def __init__(self): 
        print('Employee created') 
  
    # Calling destructor 
    def __del__(self): 
        print("Destructor called") 
  
def Create_obj(): 
    print('Making Object...') 
    obj = Employee() 
    print('function end...') 
    return obj 
  
print('Calling Create_obj() function...') 
obj = Create_obj() 
print('Program End...')

출력:

Calling Create_obj() function...
Making Object...
Employee created
function end...
Program End...
Destructor called

예 3: 이제 다음 예를 고려하십시오.

# Python program to illustrate destructor 
  
class A: 
    def __init__(self, bb): 
        self.b = bb 
  
class B: 
    def __init__(self): 
        self.a = A(self) 
    def __del__(self): 
        print("die") 
  
def fun(): 
    b = B() 
  
fun()

출력:

die

이 예에서는 fun() 함수가 호출되면 클래스 B의 인스턴스를 생성합니다. 클래스 A에 자신을 전달한 다음 클래스 B에 대한 참조를 설정하고 순환 참조를 만듭니다.

일반적으로 이러한 유형의 순환 참조를 감지하도록 설계된 Python의 가비지 수집기는 이를 제거하지만 이 예에서는 사용자 지정 소멸자를 사용하여 이 항목을 "수집할 수 없음"으로 표시합니다.

간단히 말해서, 물체가 파괴되는 순서를 모르기 때문에 그대로 놔두는 것입니다. 따라서 인스턴스에 순환 참조가 포함된 경우 해당 인스턴스는 애플리케이션이 실행되는 동안 메모리에 존재합니다.

관련 추천: "Python Tutorial"

위 내용은 Python의 소멸자에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.