私は次のクラスを持っています
class Foo():
data = "abc"
そして私はそれをサブクラス化します
class Bar(Foo):
data +="def"
サブクラスの親クラス属性を編集しようとしています。親クラスに文字列を持たせたいのですが、サブクラスはその文字列にデータを追加する必要があります。 Pythonでどのように行う必要がありますか?私は設計上間違っていますか?
あなたは2つの質問をします:
Pythonでどのように行う必要がありますか?
class Bar(Foo):
data = Foo.data + "def"
私は設計上間違っていますか?
私は通常、Pythonではクラス変数を使用しません。より一般的なパラダイムは、インスタンス変数を初期化することです。
>>> class Foo(object):
... data = "abc"
...
>>> class Bar(Foo):
... def __init__(self):
... super(Bar, self).__init__()
... self.data += "def"
...
>>> b = Bar()
>>> b.data
'abcdef'
>>>
BarクラスからFooクラスの状態を初期化してから、次のようにデータに追加できます。
class Foo(object):
def __init__(self):
self.data = "abc"
class Bar(Foo):
def __init__(self):
super(Bar, self).__init__()
self.data += "def"
Barのインスタンスをインスタンス化すると、結果のデータの値は次のようになります。
abcdef
通常の属性アクセスを介して、Barの名前空間からFooのクラス変数を参照できます。
class Bar(Foo):
data = Foo.data + 'def'
それが良い習慣かどうかはわかりませんが、悪い理由はありません。