super
ここの用語の使い方が理解できませんか?それはクラスですか、関数ですか、それとも何か他のものですか?
以下のコードから:
class Child(SomeBaseClass):
def __init__(self):
super(Child, self).__init__()
誰かが以下のコード行を説明してもらえますか?
super(Child, self).__init__()
super
ここの用語の使い方が理解できませんか?それはクラスですか、関数ですか、それとも何か他のものですか?
以下のコードから:
class Child(SomeBaseClass):
def __init__(self):
super(Child, self).__init__()
誰かが以下のコード行を説明してもらえますか?
super(Child, self).__init__()
super(Child, self).__init__() <=> SomeBaseClass.__init__(self)
これは、親クラスのメソッドを明示的に入力することなく呼び出すための優れた省略形を提供します。これは長く (プログラマーは怠け者です)、エラーが発生しやすい可能性があります。後でコードを変更して、それChild
がSomeBaseClass
もはやAnotherBaseClass
ではなく である場合、コンストラクターへの呼び出しを変更する必要はありません (デフォルトでは呼び出されないため、それ自体が必要です)。
基本クラスは 1 つしかないため、このケースは明らかですが、あいまいさがある場合 (たとえば、2 つ以上の親クラス) は、mro が優先されることに注意してください (それが目的であるため、ご想像のとおり)。 :
>>> class A(object):
... def __init__(self):
... print "A"
...
>>> class B(object):
... def __init__(self):
... print "B"
...
>>> class C(A, B):
... def __init__(self):
... super(C, self).__init__()
... print "C"
...
>>> c = C()
A
C
>>> class D(B, A):
... def __init__(self):
... super(D, self).__init__()
... print "D"
...
>>> d = D()
B
D
>>> class CC(A, B):
... def __init__(self):
... B.__init__(self) # Explicitely call B and not A !
... print "CC"
...
>>> cc = CC()
B
CC
__init__()
は Python のコンストラクタであり、super
クラスを継承する親クラスです。
class Child(SomeBaseClass):
def __init__(self):
super(Child, self).__init__()
このコードでは、タイプの新しいオブジェクトに夢中になるたびにChild
、コンストラクターが呼び出され、コンストラクターが呼び出さ__init__()
れますSomeBaseClass.__init__().
super(Child, self).__init__()
手段:__init__
の基本型のメソッドをChild
インスタンスで呼び出すself
。したがって、あなたの場合、これはSomeBaseClass.__init__(self)
. ただし、使用super
すると、基本型に再度明示的に名前を付けることを回避でき、多重継承でも機能します。
したがってsuper(t, self)
、基本的には type の基本型を取得し、t
それをインスタンスにバインドして、self
メソッドを直接呼び出すことができることを意味します。
Python 3 では、 への引数super()
はオプションであるため、super().__init__()
機能することに注意してください。