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

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

WBOY
リリース: 2023-04-27 10:13:13
転載
1926 人が閲覧しました

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 までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート