2

superここの用語の使い方が理解できませんか?それはクラスですか、関数ですか、それとも何か他のものですか?

以下のコードから:

class Child(SomeBaseClass):
    def __init__(self):
        super(Child, self).__init__()

誰かが以下のコード行を説明してもらえますか?

super(Child, self).__init__()
4

3 に答える 3

0
super(Child, self).__init__() <=> SomeBaseClass.__init__(self)

これは、親クラスのメソッドを明示的に入力することなく呼び出すための優れた省略形を提供します。これは長く (プログラマーは怠け者です)、エラーが発生しやすい可能性があります。後でコードを変更して、それChildSomeBaseClassもはや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
于 2013-11-01T19:05:31.873 に答える
0

__init__()は Python のコンストラクタであり、superクラスを継承する親クラスです。

class Child(SomeBaseClass):
    def __init__(self):
        super(Child, self).__init__()

このコードでは、タイプの新しいオブジェクトに夢中になるたびにChild、コンストラクターが呼び出され、コンストラクターが呼び出さ__init__()れますSomeBaseClass.__init__().

于 2013-11-01T19:01:52.513 に答える
0
super(Child, self).__init__()

手段:__init__の基本型のメソッドをChildインスタンスで呼び出すself。したがって、あなたの場合、これはSomeBaseClass.__init__(self). ただし、使用superすると、基本型に再度明示的に名前を付けることを回避でき、多重継承でも​​機能します。

したがってsuper(t, self)、基本的には type の基本型を取得し、tそれをインスタンスにバインドして、selfメソッドを直接呼び出すことができることを意味します。

Python 3 では、 への引数super()はオプションであるため、super().__init__()機能することに注意してください。

于 2013-11-01T19:02:26.613 に答える