언제 __init__
을 사용해야하고 __call__
방법을 사용해야합니까?__init__ 또는 __call__?
첫 번째 또는 두 번째를 사용해야하는지 혼란 스럽습니다.
현재 둘 다 사용할 수 있지만 어느 것이 더 적절한 지 알 수 없습니다.
언제 __init__
을 사용해야하고 __call__
방법을 사용해야합니까?__init__ 또는 __call__?
첫 번째 또는 두 번째를 사용해야하는지 혼란 스럽습니다.
현재 둘 다 사용할 수 있지만 어느 것이 더 적절한 지 알 수 없습니다.
이 두 가지는 완전히 다릅니다.
__init__()
은 생성자이며 개체의 새 인스턴스에서 실행됩니다.
__call__()
은 마치 개체가 함수 인 것처럼 개체의 인스턴스를 호출하려고 할 때 실행됩니다.
예 : 우리는 클래스, Test
가지고 말 :
a = Test() #This will call Test.__init__() (among other things)
a() #This will call Test.__call__()
나는 그것을 지금, 감사합니다 ! – JeremyL
동일하게 만들 때를 제외하고 ... 호출 가능한 iterables 인 lazy string Tokenizer 클래스를 빌드합니다. 구현 DRY를 유지하고 사용자에게 동등한 API를 제공하려면'__call __()'은'self'를 반환하고'__init __()'는 같은 인수를 사용하여'__call __()'을 호출합니다. Tokenizer = Tokenizer()와 같은'tokens = list (Tokenizer (doc, ngrams = 2))'를 상상해보십시오. tokens = list (tokenizer (doc, ngrams = 2))'list (tokenizer.tokenize (doc, ngrams = 2))와 동일'사용자가 그것을 어떻게 사용 하든지 상관없이 그냥 작동한다. – hobs
@hobs, 훌륭한 예! 왜 그걸 답으로 쓰지 않는거야? – wombatonfire
빠른 테스트가 결코에서 그들 사이의 차이
class Foo(object):
def __init__(self):
print "init"
def __call__(self):
print "call"
f = Foo() # prints "init"
f() # prints "call"
을 보여주고있다 이러한 상호 교환
대부분의 경우, 당신을 __init__
을 사용하고 싶습니다. 이 클래스를 호출하여 클래스의 새 인스턴스를 초기화하는 데 사용되는 메서드입니다. __call__
은 인스턴스를 호출 가능하게 만들려는 경우입니다. 그것은 유용 할 수 있지만, 자주 수행되는 것이 아닙니다. 이 예는 다음을 설명해야합니다.
>>> class C(object):
... def __init__(self):
... print 'init'
... def __call__(self):
... print 'call'
...
>>> c = C()
init
>>> c()
call
>>>
간단한 코드 스 니펫이이를 더 자세히 설명합니다.
>>> class Math:
... def __init__(self):
... self.x,self.y=20,30
... def __call__(self):
... return self.x+self.y
...
>>> m=Math()
>>> m()
50
글쎄, 무엇을하려고합니까? – arshajii
둘 다 사용할 수 있으며 둘 다 구현할 수 있습니다. 당신이하려고하는 것을 우리에게 말하지 않는다면, 어떻게 도울 수 있습니까? 설명서가 혼란 스럽습니까? 어느 부분이 혼란 스럽습니까? –
관련 : http://stackoverflow.com/questions/9663562/what-is-difference-between-init-and-call-in-python –