>  기사  >  백엔드 개발  >  내 Python 클래스는 __del__ 메서드를 정의하지만 객체를 삭제할 때 호출되지 않습니다.

내 Python 클래스는 __del__ 메서드를 정의하지만 객체를 삭제할 때 호출되지 않습니다.

WBOY
WBOY앞으로
2023-09-24 23:21:051219검색

내 Python 클래스는 __del__ 메서드를 정의하지만 객체를 삭제할 때 호출되지 않습니다.

__del__은 Python의 마법 메서드입니다. 이러한 마법의 방법을 사용하면 객체 지향 프로그래밍에서 매우 깔끔한 트릭을 구현할 수 있습니다. 던더(Dunder) 방법이라고도 합니다. 이러한 메서드는 접두사와 접미사로 사용되는 두 개의 밑줄(__)로 식별됩니다.

Python에서는 __new__()를 사용하여 객체를 생성하고 __init__()을 사용하여 초기화합니다. 그러나 객체를 파괴하려면 __del__()이 있습니다.

객체를 생성하고 삭제해 봅시다 -

으아아아

출력

으아아아

이유

그러나 클래스가 __del__을 정의했지만 객체 삭제 시 호출되지 않는 경우에는 여러 가지 이유가 있을 수 있습니다. -

  • del 문은 반드시 __del__()을 호출하는 것은 아닙니다. 단지 객체의 참조 횟수를 줄이고 0에 도달하면 __del__()을 호출합니다.

  • __del__() 메서드는 무작위로 호출될 수 있습니다. - 데이터 구조에 순환 링크가 포함된 경우 참조 횟수는 결코 0으로 돌아가지 않습니다. Python은 이러한 주기를 감지하는 알고리즘을 실행하지만 가비지 수집기는 데이터 구조에 대한 마지막 참조가 사라진 후 얼마 동안 실행될 수 있습니다.

문제 해결

수정 사항은 다음과 같습니다. -

  • __del__()을 직접 호출하지 마세요 - _del__()은 close()를 호출해야 하며, close()는 동일한 개체에서 여러 번 호출될 수 있는지 확인해야 합니다.

  • 순환 참조 방지 - 순환 참조를 피하려면 약한 참조 모듈을 사용하세요. 참조 횟수를 늘리지 않고도 객체를 가리킬 수 있습니다. Weakref 모듈을 사용하여 클래스 인스턴스를 가져올 수도 있습니다

위 내용은 내 Python 클래스는 __del__ 메서드를 정의하지만 객체를 삭제할 때 호출되지 않습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제