Python/Python 정리

[Python] __call__ 함수 정리

우준세 2021. 6. 6. 21:52
반응형

 

이번 포스팅은 파이썬을 사용하면서

__call__ 을 이해하기 위해 정리한 글입니다.


 

1. __init__ 이란? 

앞서 파이썬의 클래스에 대해 포스팅했을 때 __init__이라는 생성자 함수에 대해 설명했습니다. 

다시 한번 설명하자면 __init__ 은 생성자입니다. 

 

class Calc:
    def set(self, n1, n2):
    	self.n1 = n1 
        self.n2 = n2
 
    def add(self, n1, n2):
        return self.n1 + self.n2 

 

위의 함수에서 add라는 더하기 메서드를 set으로 먼저 정의하지 않고 사용한다면 오류가 발생합니다.

그것을 방지하기 위해 

 

class Calc:
    def __init__(self, n1, n2):
    	self.n1 = n1 
        self.n2 = n2
 
    def add(self, n1, n2):
        return self.n1 + self.n2 

set -> __init__으로 바꾸어 클래스를 호출할 때 생성자 매개변수가 없다면 실행이 되지 않게 됩니다.

 


2. __call__ 이란? 

그래서 __call__ 이란 무엇인가? 

대답은 함수를 호출 하는 것처럼 클래스의 객체도 호출하게 만들어주는 메서드가 __call__입니다! 

 

즉, __init__ 은 인스턴스 초기화를 위해, __call__ 은 인스턴스가 호출됐을 때 실행되는 것입니다.

class Calc:
    def __init__(self, n1, n2):
        self.n1 = n1 
        self.n2 = n2
        return print(self.n1, self.n2)

    def __call__(self, n1, n2):
        self.n1 = n1 
        self.n2 = n2
        return print(self.n1 + self.n2)

s = Calc(1,2)

s(7,8)

 

앞서 __init__ 을 설명했을 때 코드를 조금 수정해서 만들었습니다.

이렇게 됐을때 출력은 어떻게 될까요?

 

1 2 

15 

 

이렇게 출력이 됩니다.

이처럼 __init__ 으로 클래스를 생성하고 

__call__ 로 정의된 것을 함수처럼 불러오게 하는 역할을 합니다. 

 

이를 이용해 데코레이션 @ 이나 다양하게 사용할 수 있습니다.

 

 

__call__ 함수에 대해 정리해 보았고

틀린 점이나 질문이 있으면 댓글로 남겨주세요 

감사합니다! 

 

 

 

728x90
반응형