[Python] 생성자 소멸자
생성자와 소멸자가 있는 Number 클래스를 선언해보자
class Number:
num = 0
# 생성자
def __init__(self, name):
self.name = name
Number.num += 1
# 소멸자
def __del__(self):
Number.num -= 1
생성자
Number 클래스의 객체가 선언됨과 동시에 생성자(__init__)는 실행된다.
a와 b로 Number 클래스를 인스턴스화 한 후 클래스 속성인 num을 출력해보자
(클래스 속성은 전 글 참고 : 2022.11.19 - [Python/파이썬 초급] - [Python] class (클래스와 인스턴스)
a = Number('a')
b = Number('b')
print(Number.num)
print(Number.__dict__)
2
{'__module__': '__main__', 'num': 2, '__init__': <function Number.__init__ at 0x0000013265B16A60>, '__del__': <function Number.__del__ at 0x0000013265B16AF0>, '__dict__': <attribute '__dict__' of 'Number' objects>, '__weakref__': <attribute '__weakref__' of 'Number' objects>, '__doc__': None}
a객체를 선언한 후 num + 1이 되었으며
b객체를 선언한 후 num + 1이 되어 결과는 2가 된다.
__dict__을 사용해 클래스 객체의 속성 정보를 확인할 수 있다.
여기서 num은 2이다.
num의 값을 변경한 후 다시 클래스 객체의 속성 정보를 확인해보자
Number.num = 3
print(Number.__dict__)
print(a.num)
print(b.num)
{'__module__': '__main__', 'num': 3, '__init__': <function Number.__init__ at 0x0000013265B16A60>, '__del__': <function Number.__del__ at 0x0000013265B16AF0>, '__dict__': <attribute '__dict__' of 'Number' objects>, '__weakref__': <attribute '__weakref__' of 'Number' objects>, '__doc__': None}
3
3
num값은 3이 되었으며 클래스 속성이기 때문에 각 객체에서의 num값도 3이 된다.
소멸자
소멸자는 del을 사용해 객체를 삭제할 때 실행된다.
del a
print(Number.__dict__)
{'__module__': '__main__', 'num': 2, '__init__': <function Number.__init__ at 0x0000013265B16A60>, '__del__': <function Number.__del__ at 0x0000013265B16AF0>, '__dict__': <attribute '__dict__' of 'Number' objects>, '__weakref__': <attribute '__weakref__' of 'Number' objects>, '__doc__': None}
객체 a를 삭제했고 소멸자에서 클래스 속성 num 값에 - 1이 되어
결과는 2가 된다.
'Python > 파이썬 초급' 카테고리의 다른 글
[Python] strftime과 strptime (0) | 2023.05.22 |
---|---|
[Python] from과 import (0) | 2023.05.22 |
[Python] class (클래스와 인스턴스) (0) | 2022.11.19 |
[Python] import (0) | 2022.11.19 |
[Python] 가변인자 (0) | 2022.11.14 |