6
class A:
    def __init__(self):
        print 'A'


class B(A):
    def __init__(self):
        print 'B'


b = B()
B

C++ では、出力が表示されることを期待してA Bいましたが、Python ではB. 私はPythonで同じことを達成するためにできることを知っていますsuper(B, self).__init__()が、これは明らかにデフォルトではありません(または、私は構文も初めてです)ので、オブジェクトをインスタンス化するためのパラダイムが完全に異なるのではないかと心配しています.

では、Python のオブジェクトとは何ですか? クラスとの関係は何ですか? Python のすべての親クラスのすべてのデータを初期化する標準的な方法は何ですか?

4

3 に答える 3

4

では、Python のオブジェクトとは

Python のオブジェクトは、メンバーとメソッドの辞書のようなものです。それ以上に洗練されたものではありません。可視性の処理はありません (メンバーを非表示にしたい場合は、公開ドキュメントでそれについて話さないでください。コメントだけで)。

クラスとの関係は何ですか

クラスは、そのdict /objectをインスタンス化するメソッド / メンバーのスケルトンを定義します。これは、__init__()そのオブジェクトを作成するときに使用されるハンドラーのみです。

Python ですべての親クラスのすべてのデータを初期化する標準的な方法は何ですか?

コンストラクターを再定義しないと、すべての親クラスでコンストラクターが開始されます (デフォルトの C++ 動作のように) か、コンストラクターを再定義してから、親クラスのコンストラクターを明示的に呼び出す必要があります。

python の禅を思い出してください: 「明示的は暗黙的よりも優れています」。ここは完全に当​​てはまります。

于 2013-06-12T10:39:04.680 に答える
3

継承されたクラス コンストラクターで基本コンストラクターを呼び出す必要があります。

class B(A):
    def __init__(self):
        A.__init__(self)
        # super(B, self).__init__() you can use this line as well
        print 'B'
于 2013-06-12T10:27:42.967 に答える