특별 메소드(special method)
- 메소드 중에서 __로 시작해서 __로 끝나는 메소드
- 함수처럼 실행할 수 있게 한다.
- 다양한 기능을 적용할 수 있다.
__call__
- 객체중에서 ()를 통해 실행 할 수 있는 객체
- __call__메서드를 가지고 있는 객체
class Test:
def say_hi(self):
print("hi")
def __call__(self):
print("hi")
test1 = Test()
test1()
def test():
print("hi")
print(type(test))
test.__call__()
hi
<class 'function'>
hi
- 파이썬의 모든 것은 객체이다.
- 함수 또는 인서턴스에 ()를 붙인다면 __call__메서드를 찾고 이를 실행한다.
- 매직메서드를 통해 인스턴스를 함수처럼 사용할 수 있다.
- 함수의 이름은 code를 실행하는 __call__ 메서드를 가진 function클래스를 담은 인스턴스이다.
__getattribute__
- .을 통해 객체의 자원에 접근 할 수 있게한다.
- self,item인자를 받는다.
class Test:
name = "seo"
def say_hi(self):
print("hi")
def __call__(self):
print("hi")
def __getattribute__(self, item):
print("__getattribute__")
print(item)
return super().__getattribute__(item)
test1 = Test()
print(test1.name)
__getattribute__
name
seo