ホームページ  >  記事  >  バックエンド開発  >  Pythonのクラス継承を例とともに詳しく解説

Pythonのクラス継承を例とともに詳しく解説

Y2J
Y2Jオリジナル
2017-04-28 09:27:021247ブラウズ

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

Python クラスの継承について説明する多くの記事では、そのほとんどが について話しています。 oop 、ポリモーフィズム、その他の概念は、特定の基礎を備えた開発者にとってはあまり役に立たないかもしれませんが、特定のコード状況でコードを実行した場合の効果を示すには、さまざまな状況で書かれたコードを直接使用する方がよいでしょう。これは開発者にとってより役立つかもしれません。くだらない話はせずに、コードに直接取り組んでください。

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

クラス内の __init__ 関数の場合、それは単に呼び出される関数です。初期化 (ps: 初期化とインスタンスの作成。これはプロセスではありません。インスタンスの作成は create 関数によって完了します)。サブクラス内に __init__ 関数の明示的な宣言がない場合、サブクラスはその __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..."

このとき、親クラスの Animal の __init__ メソッドを直接呼び出しているため、結果は以下の通りです:

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

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

class animal():
 name="hh"
 sex=""
 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
 def run(self):
  print "dog is running..."
class jinmao(dog):
 # def __init__(self):
 #  self.ji="jinmao"
 pass
if __name__=="__main__":
 dg=jinmao()
 print dg.__dict__

。このときの結果は同じです

{}

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

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


概要:

Python 仮想マシンがクラスを作成する方法 (具体的には、.pyc ファイルをロードするとき、C 言語のコード ロジックを通じてクラス オブジェクトをメモリに配置する方法) を知りたい場合は、私もこの側面について学んでいるので、一緒に探求できればと思っています)

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

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