08.3 屬性描述符__get__ __set__ __delete__

# -*- 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實例中
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章