zoukankan      html  css  js  c++  java
  • [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__
    
  • 相关阅读:
    input上传图片的坑
    nodejs创建一个静态文件服务器的根目录anywhere
    深浅拷贝
    es6中数组的flat()和flatMap()
    new Date()在ios上的坑
    一些常用的css Hack
    IntrospectorCleanupListener
    http header
    ActionContextCleanUp
    OpenSessionInViewFilter
  • 原文地址:https://www.cnblogs.com/iiiiiher/p/8670185.html
Copyright © 2011-2022 走看看