• [py]数据描述符优先级


    实例查找属性的顺序:

    类属性 > 数据描述符 > 实例属性 > 非数据描述符 > __getattr__
    

    类属性>数据描述符>实例属性

    class Str:
        def __get__(self, instance, owner):
            print("执行: __get__")
    
        def __set__(self, instance, value):
            print("执行: __set__")
    
        def __delete__(self, instance):
            print("执行: __delete__")
    
    
    class A:
        name = Str()
    
        def __init__(self):
            self.name = "mm"
    
    
    a = A()
    A.name = "maotai_class"  # 添加类属性
    
    print(a.name) # 1.优先打印类属性 2.其次打印数据描述符 3.最后打印实例属性
    

    实例属性>非数据描述符

    class Str:
        def __get__(self, instance, owner):
            print("执行: __get__")
    
        # def __set__(self, instance, value):
        #     print("执行: __set__")
    
        # def __delete__(self, instance):
        #     print("执行: __delete__")
    
    
    class A:
        name = Str()
    
    
    a = A()
    a.name = "maotai"
    print(a.__dict__)
    
    --
    {'name': 'maotai'}
    
    class Str:
        def __get__(self, instance, owner):
            print("执行: __get__")
    
        def __set__(self, instance, value):
            print("执行: __set__")
    
        # def __delete__(self, instance):
        #     print("执行: __delete__")
    
    
    class A:
        name = Str()
    
    
    a = A()
    a.name = "maotai"
    print(a.__dict__)
    
    --
    执行: __set__
    {}
    

    非数据描述符>找不到

    class A:
        def __getattr__(self, item):
            print("触发__getattr__")
    
    a = A()
    a.xxx # 触发__getattr__
    
  • 相关阅读:
    python二进制转换
    git的使用
    c++primer plus笔记
    c++primer 学习笔记
    二分查找
    字符串全排列
    斐波那契数列
    JavaScript 相关
    HTTP记录
    前端笔记
  • 原文地址:https://www.cnblogs.com/iiiiiher/p/8670185.html
Copyright © 2020-2023  润新知