super().__init__() 、 super(B,self).__init__()
需要注意的是python2、3的super写法稍有不同。
__init__() は Python のコンストラクターで、オブジェクトの作成時に「自動的に呼び出されます」。
定义类时可以不写init方法,系统会默认创建, 你也可以写一个,让你的类在创建时完成一些“动作”。
サブクラス B と親クラス A の両方に init メソッドが記述されている場合、
Then A の init メソッドは B によって上書きされます。 A の init メソッドを呼び出したい場合は、super を使用して呼び出す必要があります。
もちろん、B 内では、super を使用して親クラス メソッドを呼び出すだけでなく、親クラス名を使用して呼び出すこともできます。例:
class B(A): def __init__(self): A.__init__(self) print("B init")
「カバレッジ」の意味を誤解しており、「カバレッジ」というとそんなものはないという意味だと思っている人もいるかもしれません。 ?
カバーされたということは、それがなくなったことを意味するものではなく、A のメソッドは結局のところまだ存在していますが、B の内側のスーパーで呼び出す必要があります。
例: A里写了一个方法hi(), B继承自A, B里也写了一个方法hi()。 B的对象在外部调用hi(), 就只能调用B里面写的这个hi()。 想通过B调用A的hi(),只能在B内部用super().hi()调用。
class A: def hi(self): print("A hi") class B(A): def hello(self): print("B hello") b = B() b.hi() # B里没有写hi(),这里调用的是继承自A的hi() ------------------------------------------------------------------ class A: def hi(self): print("A hi") class B(A): def hi(self): print("B hi") b = B() b.hi() # 这里调用的就是B自己的hi() ------------------------------------------------------------------ class A: def hi(self): print("A hi") class B(A): def hi(self): super().hi() # 通过super调用父类A的hi() print("B hi") b = B() b.hi() # 这里调用的就是B里面的hi()
Python3.x と Python2.x の 1 つの違い: Python 3 では、super( の代わりに super().xxx を直接使用できます。 Class, self).xxx :
例:
python3 は次のように直接記述できます: super().__init__()
python2 は次のように記述する必要があります: super(クラス名, self ).__init__( )
Python3.x 例:
class A: def add(self, x): y = x+1 print(y) class B(A): def add(self, x): super().add(x) b = B() b.add(2) # 3
Python2.x 例:
#!/usr/bin/python # -*- coding: UTF-8 -*- class A(object): # Python2.x 记得继承 object def add(self, x): y = x+1 print(y) class B(A): def add(self, x): super(B, self).add(x) b = B() b.add(2) # 3
最下層: 最初に親クラス A
class A: def __init__(self): print('A')
を記述します。2 番目の層: B、C、D を A
class B(A): def __init__(self): print('B') super().__init__() class C(A): def __init__(self): print('C') super().__init__() class D(A): def __init__(self): print('D') super().__init__()
から継承させます。3 番目の層: E、F、G を継承
class E(B, C): def __init__(self): print('E') super().__init__() class F(C, D): def __init__(self): print('F') super().__init__() class G(E, F): def __init__(self): print('G') super().__init__()
G の継承順序を見てください
G は E から継承し、F は並列であることがわかりました。初期化中、E は継承されません。最初に初期化されます。F.
以下に 3 つの異なる継承と呼び出しを示します。それらの違いを比較し、 super().__init__() の目的を理解します。
継承内容 | |
---|---|
すべてを継承します | |
継承しますが、init メソッドをオーバーライドします | |
継承しますが、init メソッドをオーバーライドして super().__init__() |
以上がPython で super() 関数の __init__() メソッドを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。