2016-08-31 2 views
-1

ケース1いCASE1ではのpythonオーバーライド

class A(object): 
    def __init__(self): 
     print "A" 
class B(A): 
    def __init__(self): 
     print "B" 
c = b() 
#output: 
#B 

それはclass Aのコンストラクタを実行し、ケース2でそれが実行されますclass Bのコンストラクタです。

case1がAを出力すると、class Aコンストラクタが実行されていると解釈されます。これは、class Bが継承しているためです。

ケース2の場合、class Bコンストラクタのみが実行されますが、class Aコンストラクタが実行されないのはなぜですか。

ここでは何が起こっているのですか? Pythonはclass Aコンストラクタをオーバーライドしていますか?または、何が起こっているのですか? "私はプログラミングに新しいです。"

+3

*初期化子*を上書きしています。親*初期化子*は 'super'を使ってアクセスできます。 –

+1

'B'に' __init__'を入れると、 'A'のものを上書きします。あなたがしなければ、それはしません。 Pythonの '__init__'メソッドは、スーパークラスの' __init__'メソッドを自動的に呼び出すわけではありません。あなたのタイトルに「過負荷」を入れた理由は分かりません。 – khelwood

+1

* "OOPsコンセプトに従って、コンストラクタは継承できません。" * - 誰が言っていますか? – deceze

答えて

2

ドキュメントによれば、クラスが構築されると、基本クラスは常に記憶されます。したがって、属性が見つからない場合はすべての依存関係が解決され、プロセスはすべての基本クラスで機能します。あなたの場合、クラスBはinitメソッドを持たないので、親メソッドを呼び出します。 2番目の例では、基本クラスのコンストラクタを実行する場合は、super()関数を使用できます。

関連する問題