08.3 屬性描述符__get__ __set__ __delete__
阿新 • • 發佈:2021-08-01
作者:zy7y 出處:http://www.cnblogs.com/zy7y 本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須在文章頁面給出原文連結,否則保留追究法律責任的權利。# -*- 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例項中