投稿/コメントを表示します。

@propertyデコレーターを使いプロパティ化したメソッドは、データ属性のように扱えるとのことでした。
実際にどのようなケースで使われることが多いのか気になりました。

@propertyをCntl+Bで定義をみると、builtins.py4267行目に飛び、dogstringsに以下の通り、Property attributeが書かれてました。
値を呼び出す時には@propertyで呼び出す
値を変更するときは@プロパティ名.setterを呼び出す。
予期せぬ値が入り込まないように、'setter'で値を制限するというような使われ方がするのか気になりました。

builtins.py 4267行目
        class C(object):
            @property
            def x(self):
                "I am the 'x' property."
                return self._x
            @x.setter
            def x(self, value):
                self._x = value
            @x.deleter
            def x(self):
                del self._x

値を呼び出す時には@propertyで呼び出す
値を変更するときは@name.setterを呼び出す。
値が未入力の場合は、@name.setterでエラーを出す、いうような使われ方がするのか気になりました。
class Human:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    @property
    def name(self):
        return self._name
    # self.nameにすると、nameメソッドが呼び出されてしまい無限ループ

    @name.setter
    def name(self, name_value):
        if not name_value:
            raise ValueError('invalid name')
        self._name = name_value

if __name__ == '__main__':
    human = Human('山田太郎', 20)
    print(human.name)
    print(human.age)
    # 山田太郎
    # 20

    human.name = "佐藤花子"
    print(human.name)
    # 佐藤花子

    human.name = ""
    print(human.name)
    #  raise ValueError('invalid name')
    # ValueError: invalid name

2022/12/01 21:43