1. 程式人生 > 其它 >08.3 屬性描述符__get__ __set__ __delete__

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例項中

作者:zy7y 出處:http://www.cnblogs.com/zy7y 本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須在文章頁面給出原文連結,否則保留追究法律責任的權利。