スーパークラスのメソッドからサブクラスのコンストラクタで設定された自己変数にアクセスしたいとします。Python:上書きされないスーパークラスのメソッドでサブクラスから変数にアクセス
class A(object):
def __init__(self):
self.a = "I'm the class A."
def getA(self):
return self.a
class B(A):
def __init__(self):
super(B, self).__init__()
self.a = "I'm the class B."
x = B()
print(x.getA())
結果は常に「A」です。サブクラスのコンストラクタでスーパー変数を上書きできないのはなぜですか?私はPythonで継承するのは初めてです。私はJavaの場合と同じように動作します。
編集:ありがとう、あなたのコメントのために。あなたが当然のことながら、これは実際に動作します。これは私がやろうとしていたことを実証するための短いスケッチでした。元のコードはもっと複雑で、私はいくつかの自己を欠いていました。まだ少し混乱しています。Javaで必要ないので、毎回自分で書く必要があります。
'getA'に渡された' self'が欠けていること以外は、あなたのコードは期待通りに動作すると思います。(これは "私はクラスBです")。 – mgilson
上記のとおり、投稿したコードは機能しません。それは 'def getA(self):'でなければなりません。それを修正してサンプルを実行してください。 「私はクラスBです。」と印刷します。私達はあなたがあまりにもできるように、テストにコピー/ペーストします! – tdelaney