그냥 파이썬을 배우기 시작했습니다. 나는 __call__
메소드를 발견했습니다. 나는이 때 __init__
호출되는 이해하고 때 __call__
이 간단한 예제를 실행하여 호출됩니다 :java에 python __call__과 동일한 기능이 있습니까?
class Constructor:
def __init__(self, a):
print "__init__ called"
def __call__(self):
print "__call__ called"
def dummy(self):
print "a dummy method called"
print "creating x obj"
x = Constructor(1)
print "calling x object"
x()
콘솔 출력 :
creating x obj
__init__ called
calling x object
__call__ called
내 질문은 :
나는 자바 배경에서 오는- , 나는
__init__
이 자바 생성자에 매핑된다는 것을 알고 있으며, java가__call__
과 동등한 성능을 제공하므로이 점을 더 잘 이해할 수 있습니까? __call__
이 유용 할 수있는 간단한 예를 누군가 줄 수 있습니까?
나는 당신이 사용할 수있는 것은 실행 가능한 인터페이스 생각 . 실행 가능한 인터페이스를 구현 한 객체를 만든 다음 x.run()을 호출하십시오. 인터페이스 (예 : 사용자 인터페이스)는 Observer 패턴을 가능하게합니다. IMO는 재사용 가능한 객체를 작성하는 가장 중요한 단일 패턴입니다. http://en.wikipedia.org/wiki/Observer_pattern –
파이썬 클래스에서 run()이라는 간단한 메서드를 정의하여 x.run()을 간단하게 수행 할 수 있다면 혼란 스럽다. 왜 파이썬은 __ 호출 __과 같은 것을 디자인하는데 전혀 신경을 쓰지 않는가? – Shengjie
파이썬에서'__call__'은 언어의 기본입니다 (http://eli.thegreenplace.net/2012/03/23/python-internals-how-callables-work/ 참조). 다음과 같은 여러 가지 문제/작업을 해결하는 데 도움이됩니다. 관찰자 패턴, 콜백 등등. –