# -*- coding: utf-8 -*-
# @Time : 2021/8/1 18:31
# @Author : zy7y
# @Gitee : https://gitee.com/zy7y
# @File : attr_desc.py
# @Project : PythonBooks
class IntField:
"""
當實現了 以下 三個魔術方法中都任意一個 這個類 就可以說是屬性描述符
"""
def __get__(self, instance, owner):
pass
def __set__(self, instance, value):
print(instance, value)
if not isinstance(value, int):
raise ValueError("IntField 必須傳入 int 類型")
def __delete__(self, instance):
pass
class NoData:
"""無數據描述符 實現 __get__魔法函數"""
def __get__(self, instance, owner):
print(owner)
print(self.value)
class User:
age = IntField()
# no = NoData()
if __name__ == '__main__':
user = User()
# 執行賦值 操作時 會進入 IntField 中的 __set__ 魔法函數中
user.age = 123
print(user.__dict__) # 非 無數據描述符 不會進入到 user實例中
08.3 屬性描述符__get__ __set__ __delete__
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.