인프런 커뮤니티 질문&답변

taeho7702님의 프로필 이미지
taeho7702

작성한 질문수

실리콘밸리 엔지니어가 가르치는 파이썬 기초부터 고급까지

Special / Magic method(스페셜 메소드)에 대해서 알아보기

__del__ 작동 여부

작성

·

246

1

강의와 동일한 코드를 실행하였는데 강의에서의 맨 마지막 코드 실행 결과는 True만 출력된 것에 비해 직접 해본 결과

True

car deleted

car deleted

가 출력되었습니다

따로 del tesla를 하지 않아도 자동으로 변수가 del된 것 같은데 혹시 어떤 이유로 이러한 차이가 발생한 것일까요?

답변 4

1

taeho7702님의 프로필 이미지
taeho7702
질문자

실행 결과는

True

this car deleted

this car deleted

입니다

1

taeho7702님의 프로필 이미지
taeho7702
질문자

class Tesla(object):
  
  def __init__(self, owner, color):
    self.owner = owner
    self.color = color
    
  def __str__(self):
    return f"{self.color} color {self.owner}'s car"
    
  def __len__(self):
    return len(self.owner)
    
  def __del__(self):
    print("this car deleted")
    
  def __eq__(self, other):
    return self.color == other.color

tesla = Tesla("A", "Yellow")
tesla1 = Tesla("B", "Yellow")
print(tesla == tesla1)

0

미쿡엔지니어님의 프로필 이미지
미쿡엔지니어
지식공유자

안녕하세요 taeho7702님,

혹시 테스트 하실때 그냥 터미널에서 python 파일을 실행하시나요? 그렇게 된다면 GC(Garbage Collector)가 실행되어 __del__ 실행될 겁니다. 그렇지 않고 Jupyter notebook이나 Replit을 사용하신다면 GC가 나중에 세션이 끝나고 실행이 되기 때문에, 다른 밑에 두개의 프린트는 뜨지 않습니다 ㅎㅎㅎ

image

taeho7702님의 프로필 이미지
taeho7702
질문자

평소 Replit을 사용하였는데 다시 시도해 보아도 계속해서 동일하게 3줄이 출력되네요 혹시나 해서 Jupyter notebook을 사용해 보았는데 True만 정상 출력되는 것은 확인했습니다 Replit의 설정을 건드리는 기억은 없는데 어떠한 이유인지는 모르겠네요 답변 감사합니다

0

미쿡엔지니어님의 프로필 이미지
미쿡엔지니어
지식공유자

안녕하세요 taeho7702님,

제가 코드를 보지 않고는 질문이 잘 이해가 안 가는데, del tesla를 하지 않고서는 __del__이 실행이 되지는 않을 것 같습니다. 보통 이 Destructor는 Garbage Collector가 작동할 때, 즉 Object에 참조하는 것이 없어질때 실행되는데, 왜 그런 일이 일어났을까요? 혹시 코드를 올려주시면 제가 답변하는데 도움이 될 것 같습니다.

taeho7702님의 프로필 이미지
taeho7702

작성한 질문수

질문하기