@property【プロパティ デコレータ】3.5
property【プロパティ クラス】3.5

メモ 構文

メモ


構文

# getter
@property
def prop():
    ~

# setter
@prop.setter
def prop(value):
    ~

# deleter
@prop.deleter
def prop():
    ~

propプロパティ名
valueプロパティ値
class property(fget=None, fset=None, fdel=None, doc=None)

fgetプロパティ値の取得関数
fsetプロパティ値の設定関数
fdelプロパティ値の削除関数
docドキュメンテーション文字列 (省略:fgetのドキュメンテーション文字列)
fgetプロパティ値の取得関数
引数 (例)備考
なし
戻り値備考
プロパティ値
fsetプロパティ値の設定関数
引数 (例)備考
valueプロパティ値
戻り値備考
なし
fdelプロパティ値の削除関数
引数 (例)備考
なし
戻り値備考
なし

class Person:
    def __init__(self, id, name, address, tel):
        self._id = id
        self._name = name
        self._address = address
        self._tel = tel

    # id (読み取り専用)
    @property
    def id(self):
        """id docstring"""
        return self._id

    # name (読み取り専用)
    def __get_name(self):
        """name docstring"""
        return self._name

    name = property(__get_name)

    # address (フルアクセス)
    @property
    def address(self):
        """address docstring"""
        return self._address

    @address.setter
    def address(self, value):
        self._address = value

    @address.deleter
    def address(self):
        del self._address

    # tel (フルアクセス)
    def __get_tel(self):
        return self._tel

    def __set_tel(self, value):
        self._tel = value

    def __del_tel(self):
        del self._tel

    tel = property(__get_tel, __set_tel, __del_tel, "tel docstring")


staff = Person(123, "Yamada Taro", "Tokyo", "03-1234-5678")
print(staff.id, staff.name, staff.address, staff.tel)
# 出力:123 Yamada Taro Tokyo 03-1234-5678
print(Person.id.__doc__)
# 出力:id docstring
print(Person.name.__doc__)
# 出力:name docstring
print(Person.address.__doc__)
# 出力:address docstring
print(Person.tel.__doc__)
# 出力:tel docstring

# staff.id = 456
# 例外 AttributeError: can't set attribute
# staff.name = "Sato Jiro"
# 例外 AttributeError: can't set attribute
staff.address = "Osaka"
staff.tel = "06-1234-5678"
print(staff.id, staff.name, staff.address, staff.tel)
# 出力:123 Yamada Taro Osaka 06-1234-5678

Person.id.__doc__ = "ID"
print(Person.id.__doc__)
# 出力:ID
Person.name.__doc__ = "NAME"
print(Person.name.__doc__)
# 出力:NAME
Person.address.__doc__ = "ADDRESS"
print(Person.address.__doc__)
# 出力:ADDRESS
Person.tel.__doc__ = "TEL"
print(Person.tel.__doc__)
# 出力:TEL

# del staff.id
# 例外 AttributeError: can't delete attribute
# del staff.name
# 例外 AttributeError: can't delete attribute
del staff.address
del staff.tel
print(staff.id, staff.name)
# 出力:123 Yamada Taro
# print(staff.address)
# 例外 AttributeError: 'Person' object has no attribute '_address'
# print(staff.tel)
# 例外 AttributeError: 'Person' object has no attribute '_tel'