In [5]: class a(object):
...: def __init__(self):
...: print "In class a"
...: self.a = 1
...:
In [6]: class b(object):
...: def __init__(self):
...: print "In class b"
...: self.b = 2
...:
...:
In [7]: class c(b, a):
...: pass
...:
In [8]: c.mro()
Out[8]:
[<class '__main__.c'>,
<class '__main__.b'>,
<class '__main__.a'>,
<type 'object'>]
In [9]: obj = c()
In class b
In [10]: obj.__dict__
Out[10]: {'b': 2}
デフォルト__init__
方法は、内部でのみクラスb
の__init__
を呼び出すobj
作成、上と呼ばれています。挙動
2クラスから継承すると、派生したクラスオブジェクトは両方のクラスの変数を持つ必要があります(それらのクラスに対してプライベートでない限り)。
私の質問:派生オブジェクトに両方のクラスの変数が含まれていると誤っていますか?もしそうなら、なぜですか?クラスa
の__init__
も呼ばれてはいけませんか? C++のような言語で何が起こったでしょうか?
jcolladoの回答が正しいです。 'super'の仕組みの詳細については、[この回答](http://stackoverflow.com/q/607186)を参照してください。 – perelman