pythonサブクラスのコンストラクタ定義時の注意点(親クラスのコンストラクタが上書きしないように)
class B: """ 親クラス """ def __init__(self) -> None: self.x = 10 class D(B): """ サブクラス2 自分の __init__ を定義しているが super().__init__() を呼んでいないバージョン """ # noinspection PyMissingConstructor def __init__(self): self.y = 20
これで、コンストラを呼び出してみます。
obj2 = D() print(obj2.x) print(obj2.y)
出力は
AttributeError("'D' object has no attribute 'x'",)
となります。
→親クラスのコンストラクタがオーバーライドされてしまったせいです。
これを防ぐためには、サブクラス定義時に、
class E(B): """ サブクラス3 自分の __init__ を定義していて super().__init__() も呼んでいるバージョン """ def __init__(self): super().__init__() self.y = 20
とする必要があります。
以下参考