class Human:
def __init__(self) -> None:
self.name = None # type: str
def introduce(self):
print("I'm " + self.name)
class Alice(Human):
def __init__(self) -> None:
super().__init__()
self.name = "Alice"
class Bob(Human):
def __init__(self, rude: bool) -> None:
super().__init__()
self.rude = rude
@property
def name(self) -> str:
return "BOB!" if self.rude else "Bob"
if __name__ == '__main__':
alice = Alice()
alice.introduce()
bob = Bob(rude=True)
bob.introduce()
とプロパティを作成し、抽象Human
クラスは、(実際に、それは人間ではなく、問題に関連しない、より複雑な方法を有している)があります。ほとんどの実装では、文字列をname
属性(単にAlice
)に割り当てるだけで、名前を設定します。しかし、より複雑なロジックが割り当てられている場合は、Bob
のようないくつかの例外があります(値は解決の瞬間にオブジェクトの状態に依存します)。は上記のコードではない実施セッター
したがって、私はプロパティのカスタムゲッターを作成しました。Bob
クラスで私はカスタムゲッターを作成しました。ただし、スーパーコンストラクタを呼び出すと、次のエラーが発生するため、クラスインスタンスを作成することはできません。
AttributeError: can't set attribute
また、ナイーブセッターも追加することはできません。
@name.setter
def name(self, name: str):
self.name = name
なぜですか?無限ループが発生するためです。その問題を解決するには?
を行いませんが確かに、現在の状態では、開発に役立ちます(型ヒントとatt IDEのリブートのヒント)。 –