__init__
いつ、いつ__call__
メソッドを使用する必要がありますか?
1番目と2番目のどちらを使用するかについて混乱しています。
現時点ではどちらも使用できますが、どちらがより適切かはわかりません。
__init__
いつ、いつ__call__
メソッドを使用する必要がありますか?
1番目と2番目のどちらを使用するかについて混乱しています。
現時点ではどちらも使用できますが、どちらがより適切かはわかりません。
これら2つは完全に異なります。
__init__()
はコンストラクターであり、オブジェクトの新しいインスタンスで実行されます。
__call__()
オブジェクトのインスタンスを関数であるかのように呼び出そうとすると実行されます。
例:クラスがあるとしましょうTest
:
a = Test() #This will call Test.__init__() (among other things)
a() #This will call Test.__call__()
簡単なテストでそれらの違いがわかります
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
>>>