9

__init__いつ、いつ__call__メソッドを使用する必要がありますか?

1番目と2番目のどちらを使用するかについて混乱しています。

現時点ではどちらも使用できますが、どちらがより適切かはわかりません。

4

4 に答える 4

20

これら2つは完全に異なります。

__init__()はコンストラクターであり、オブジェクトの新しいインスタンスで実行されます。

__call__()オブジェクトのインスタンスを関数であるかのように呼び出そうとすると実行されます。

例:クラスがあるとしましょうTest

a = Test() #This will call Test.__init__() (among other things)
a() #This will call Test.__call__()
于 2012-12-31T16:34:35.657 に答える
9

簡単なテストでそれらの違いがわかります

class Foo(object):
    def __init__(self):
        print "init"
    def __call__(self):
        print "call"

f = Foo()  # prints "init"
f()        # prints "call"

これらは決して互換性がありません

于 2012-12-31T16:35:24.200 に答える
7

ほとんどの場合、を使用します__init__。これは、クラスを呼び出すことによって作成するクラスの新しいインスタンスを初期化するために使用されるメソッドです。__call__インスタンスを呼び出し可能にしたい場合に備えて。これは頻繁に行われることではありませんが、便利な場合があります。この例は、次のことを示しています。

>>> class C(object):
...   def __init__(self):
...     print 'init'
...   def __call__(self):
...     print 'call'
... 
>>> c = C()
init
>>> c()
call
>>> 
于 2012-12-31T16:36:08.740 に答える