1. ホーム
  2. python

Pythonで継承されたクラス変数を変更する

2023-10-08 03:01:35

質問

子クラスが親クラスから継承したクラス変数を変更したいのですが、どうすればよいですか?

というようなことをしたいのですが。

class Parent(object):
    foobar = ["hello"]

class Child(Parent):
    # This does not work
    foobar = foobar.extend(["world"])

と、理想的には持っています。

Child.foobar = ["hello", "world"]

できるようになった。

class Child(Parent):
    def __init__(self):
      type(self).foobar.extend(["world"])

というように変更しましたが、Childのインスタンスを生成するたびに、"world"がリストに追加されます。 私はさらにそれを修正することができました。

class Child(Parent):
    def __init__(self):
      if type(self).foobar.count("world") < 1:
          type(self).foobar.extend(["world"])

が、これはまだハックです。なぜなら、これが動作する前にChildのインスタンスを生成しなければならないからです。

もっと良い方法はないでしょうか?

どのように解決するのですか?

親クラスのリストを修正するのではなく、サブクラスで別のリストを持ちたいのだと仮定します (その場で修正するか、最初から期待される値をそこに置くことができるので、無意味なように思われます)。

class Child(Parent):
    foobar = Parent.foobar + ['world']

これは継承とは無関係に動作することに注意してください。