[Python] 생성자 소멸자

2022. 11. 20. 00:49

생성자와 소멸자가 있는 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