ホームページ  >  記事  >  バックエンド開発  >  Python で super() 関数の __init__() メソッドを使用するにはどうすればよいですか?

Python で super() 関数の __init__() メソッドを使用するにはどうすればよいですか?

WBOY
WBOY転載
2023-04-27 10:13:131760ブラウズ

super().__ init__ () は何に役立ちますか?

super().__init__() 、 super(B,self).__init__()

1. super() と __ init __() をそれぞれ理解します

1.1、super()

Python で super() 関数の __init__() メソッドを使用するにはどうすればよいですか?

需要注意的是python2、3的super写法稍有不同。
1.2. __init__ ()

__init__() は Python のコンストラクターで、オブジェクトの作成時に「自動的に呼び出されます」。

Python で super() 関数の __init__() メソッドを使用するにはどうすればよいですか?

定义类时可以不写init方法,系统会默认创建,
你也可以写一个,让你的类在创建时完成一些“动作”。
1.3, super().__ init __()

サブクラス B と親クラス A の両方に init メソッドが記述されている場合、
Then A の init メソッドは B によって上書きされます。 A の init メソッドを呼び出したい場合は、super を使用して呼び出す必要があります。

Python で super() 関数の __init__() メソッドを使用するにはどうすればよいですか?

もちろん、B 内では、super を使用して親クラス メソッドを呼び出すだけでなく、親クラス名を使用して呼び出すこともできます。例:

class B(A):
    def __init__(self):
        A.__init__(self)
        print("B init")
1.3.1 , 「カバレッジ」に関する質問

「カバレッジ」の意味を誤解しており、「カバレッジ」というとそんなものはないという意味だと思っている人もいるかもしれません。 ?
カバーされたということは、それがなくなったことを意味するものではなく、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()

2. Python2 と 3 の super() の違い

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

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 の継承順序を見てください

Python で super() 関数の __init__() メソッドを使用するにはどうすればよいですか?

Python で super() 関数の __init__() メソッドを使用するにはどうすればよいですか?

G は E から継承し、F は並列であることがわかりました。初期化中、E は継承されません。最初に初期化されます。F.

4. 複数のインスタンスから super (python3) を比較する

以下に 3 つの異なる継承と呼び出しを示します。それらの違いを比較し、 super().__init__() の目的を理解します。

4.1. インスタンス

Python で super() 関数の __init__() メソッドを使用するにはどうすればよいですか?

##サブクラス名継承内容Pupleすべてを継承します Puple_Init継承しますが、init メソッドをオーバーライドしますPuple_Super継承しますが、init メソッドをオーバーライドして super().__init__()
4.2. 実行結果の比較

Python で super() 関数の __init__() メソッドを使用するにはどうすればよいですか?

4.3、完全なコード

Python で super() 関数の __init__() メソッドを使用するにはどうすればよいですか?

以上がPython で super() 関数の __init__() メソッドを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。