0

スーパークラスの属性値を継承できないという問題に直面しました。既にスーパークラス コンストラクターを呼び出しており、継承された値をチェックアウトしようとしています。

class base:
    def __init__(self, x):
        self.x = x
        print(self.x)

class derive(base):
    def __init__(self):
        print(self.x + 1)


print("base class: ")
b = base(1)                           <-- Creating superclass instance 
print("derive class: ")
d = derived()                         <-- Inheriting. Failure.

なぜ私はこれを行うことができないのですか?x属性を取得するために、基になるオブジェクトを継承オブジェクトに明示的に渡す必要がありますか?

4

1 に答える 1

2

b関係がありdません。b基本クラスの完全にのインスタンスです。

__init__オーバーライドされたイニシャライザ ( )を呼び出したい場合は、super()プロキシ オブジェクトを使用してアクセスします。

class derive(base):
    def __init__(self):
        super().__init__(1)
        print(self.x + 1)

親クラスの初期化子に引数を渡す必要があることに注意してください。x上記の例では、親イニシャライザのパラメータに定数値 1 を渡しています。

ここでは Python 3 固有の構文を使用したことに注意してください。super()引数なしは Python 2 では機能しません。Python 2 では、クラスを新しいスタイルのクラスにするためにクラスobjectの親としても使用する必要があります。base

于 2013-10-24T19:21:55.100 に答える