ホームページ  >  記事  >  バックエンド開発  >  Pythonのクラス継承の説明

Pythonのクラス継承の説明

PHPz
PHPzオリジナル
2017-04-02 13:18:001198ブラウズ

Pythonクラスの継承を説明する多くの記事では、oop、ポリモーフィズム、その他の概念について説明しているため、ある程度の基礎を持った開発者にはあまり役に立たないと思います。さまざまなアプリケーションで直接使用することをお勧めします。 . 特定のコード状況でコードを実行した場合の効果を示すために、特定の状況下で記述されたコード。これは開発者にとってより役立つかもしれません。くだらない話はせずに、コードに直接取り組んでください。

ここでは、古典的なクラスと新しいスタイルのクラスの区別はありません。次の分析は、新しいスタイルのクラスと古典的なクラスの両方に適用されます

クラス内の init

関数の場合、それは単に呼び出される関数です。初期化 (追記: 初期化とインスタンスの作成はプロセスではありません。インスタンスの作成は create 関数によって完了します)。サブクラスに init 関数の明示的な宣言がない場合、サブクラスは親の init 関数を呼び出します。 init 関数では、init 関数が明示的に宣言されている場合、サブクラスの初期化中に親クラスの初期化関数は呼び出されません。サブクラスで宣言された関数は呼び出されますが、同時にサブクラスのインスタンスでは呼び出されません。 例:

class animal():
    name="hh"
    sex="man"
    def init(self):        self.height=10
        self.weight=50
    def deception(self):
        print "ansible.height:"+self.height+" animal.weight:"+self.weight    def run(self):
        print "animal is running...."class dog(animal):
    def init(self):
        passif name=="main":
   dg=dog()
   print dg.dict
で実行した結果。今回は

{}

dog クラスが次のように変更されたとき (追記: この時点では宣言された init メソッドが表示されていません):

class dog(animal):
    def run(self):
        print "dog is running..."

この時点では、の init メソッドを直接呼び出しているため、親クラスの動物の場合、結果は次のようになります:

{'weight': 50, 'height': 10}

このとき、dog クラスを継承するクラスがあった場合、これはどうなりますか? (Python インタプリタは、最初にサブクラスで init メソッドを検索します。見つからない場合は、見つかるまで親クラスで検索して実行します。今後、Python インタープリタは、親クラスの init メソッドを実行しません。現時点では、親クラスは実行されていません。たとえば、上記の例では、最初の実行時に取得された例には、weight 属性と height 属性がありません。
この時の結果は同じです

rreee

クラスの多重継承では、どうなるでしょうか? (多重継承では、クラスの継承パラメータの最初のパラメータで宣言された親クラスの init 関数が実行されます。親クラスに init 関数がない場合は、引き続き親クラスの init 関数を探しますヘッダーが見つかるかどうかに関係なく、init 関数が見つからない場合は、最初のパラメーターで宣言された親クラスに置き換えられます。コードは前の例に基づいて自分でテストできます。

以上がPythonのクラス継承の説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。