Programming

; develop a program

Back-End/Python

[Python] 주요 특수 메소드 – 객체 생성/소멸

Clloud_ 2022. 9. 28. 12:13
반응형

이번 포스팅에서는 파이썬의 특수 메소드 중  객체 생성/소멸 시 사용하는 메소드에 대하여 공부를 해보고자 한다.

 


__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

 


반응형