ホームページ  >  記事  >  バックエンド開発  >  クラス継承コードの詳しい解説(Python)

クラス継承コードの詳しい解説(Python)

Y2J
Y2Jオリジナル
2017-04-22 09:44:391818ブラウズ

この記事では、主に Python クラスの継承例に関する関連情報を詳しく紹介しますので、必要な方は参考にしてください

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):
  pass
if name=="main":
 dg=dog()
 print dg.dict

で実行した結果。時刻は

{}

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

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

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

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

この時点でクラスが犬クラスを継承した場合、この時点で何が起こるでしょうか? (Python インタープリターは、最初にサブクラスで init メソッドを検索します。見つからない場合は、見つかるまで親クラスで検索して実行します。これ以降、Python インタープリターは、サブクラスの init メソッドを実行しません。現時点では、親クラスは実行されていません。たとえば、上記の例では、最初の実行時に取得される属性はありません。

この時の結果は同じです

{}

マルチクラスの場合 継承時はどうなるでしょうか? (多重継承では、クラスの継承パラメータの最初のパラメータで宣言された親クラスの init 関数が実行されます。親クラスに init 関数がない場合は、検索を続けて init 関数があるかどうかを確認しますヘッダーが見つかるかどうかにかかわらず、init 関数が見つかるまでのプロセスは最初のパラメーターで宣言された親クラスに置き換えられます。ヘッダーが見つからない場合、初期化されません。) コードは、前の例に基づいて自分でテストできます。

サブクラスの親クラスのメソッドを呼び出すための super の使用法と特徴。


概要:

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

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