web-dev-qa-db-ja.com

サブクラスの親属性を変更する方法python

私は次のクラスを持っています

class Foo():
    data = "abc"

そして私はそれをサブクラス化します

class Bar(Foo):
    data +="def"

サブクラスの親クラス属性を編集しようとしています。親クラスに文字列を持たせたいのですが、サブクラスはその文字列にデータを追加する必要があります。 Pythonでどのように行う必要がありますか?私は設計上間違っていますか?

12
George

あなたは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'
>>> 
15
Robᵩ

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
5
shahvishal

通常の属性アクセスを介して、Barの名前空間からFooのクラス変数を参照できます。

class Bar(Foo):
    data = Foo.data + 'def'

それが良い習慣かどうかはわかりませんが、悪い理由はありません。

1
vaultah