이번 포스팅에서는 파이썬의 특수 메소드 중 객체 생성/소멸 시 사용하는 메소드에 대하여 공부를 해보고자 한다.
__init__ 메소드
생성자 (Initializer)로 객체를 생성할 때 호출된다.
__init__(self [, …])
self는 새롭게 생성되는 instance가 전달된다.
객체 생성 시 가져야 하는 기본 인스턴스(default instance) 변수를 정의할 때 사용한다.
__del__ 메소드
소멸자 (finalizer)로 객체가 소멸되기 직전에 호출된다.
__del__(self)
객체는 참조 카운트가 0일 때 Garbage collection에 의해 소멸된다.
인터프리터 종료 시 아직 남아있는 객체들의 소멸자 메소드 호출은 보장되지 않는다.
__call__ 메소드
객체를 함수처럼 호출할 때 실행되는 메소드다.
__call__(self, […])
예제 1
순서 1. Test 클래스를 정의한다.
순서 2. __init__ 메소드로 생성자를 생성한다.
순서 3. __del__ 메소드로 소멸자를 생성한다.
순서 4. test 메소드를 생성한다.
class Test:
def __init__(self):
print('__init__() 호출됨.')
def __del__(self):
print('__del__() 호출됨.')
def test(self):
print('test() 호출됨.')
Test 클래스를 선언하고 test( ) 메소드를 호출한다.
print('시작 부분')
t = Test()
t.test()
del(t)
print('끝 부분')
[실행결과]
시작 부분
__init__() 호출됨.
test() 호출됨.
__del__() 호출됨.
끝 부분
예제 2
순서 1. Test2 클래스를 정의한다.
순서 2. __init__ 메소드로 생성자를 생성한다.
순서 3. __call__ 메소드로 객체를 생성한다.
class Test2:
def __init__(self, num):
self.num = num
def __call__(self, num):
self.num += num
print(f"현재 num의 값은 {self.num}입니다")
return self.num
Test2 클래스를 선언하고 값을 대입하거나 call 함수를 호출한다.
t = Test2(10)
t.num
v = t(100)
print(v)
v = Test2(100)(20)
print(v)
v에는 생성된 객체의 __call__ 함수 반환한 값이 대입된다.
[실행결과]
10
현재 num의 값은 110입니다
110
현재 num의 값은 120입니다
120
'Back-End > Python' 카테고리의 다른 글
[Python] 주요 특수 메소드 – 비교 연산자 관련 표현 (2) | 2022.09.28 |
---|---|
[Python] 주요 특수 메소드 – 문자열 표현 (0) | 2022.09.28 |
[Python] 특수 메소드 (0) | 2022.09.28 |
[Python] super 함수 (0) | 2022.09.27 |
[Python] 메소드 재정의 (Method Overriding) (0) | 2022.09.27 |