728x90
반응형
이번 포스팅은 파이썬을 사용하면서
__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
반응형
'Python > Python 정리' 카테고리의 다른 글
[Python] @ (Decorator) 정리 (2) | 2021.06.14 |
---|---|
[Python] 가정 설정문 assert 정리 (0) | 2021.06.07 |
[Python] *args와 **kwargs 정리 (0) | 2021.05.23 |
[Python] if __name__ == "__main__" 정리 (0) | 2021.05.09 |
[Python] 클래스(Class) (0) | 2021.05.05 |