Python对象属性的查找顺序

637次阅读
没有评论

Python对象属性的查找顺序

Python对象属性查找顺序

(1)类和父类字典的数据描述器

(2)实例字典

(3)类和父类字典中的非数据描述器

无论类有多少个继承级别,该类对象的实例字典总是存储了所有的实例变量,这也是 super 的意义之一。

Python对象属性查找实例

def get_attribute(obj, name):
    class_definition = obj.__class__
 
    descriptor = None
    for cls in class_definition.mro():
        if name in cls.__dict__:
            descriptor = cls.__dict__[name]
            break
 
    if hasattr(descriptor, '__set__'):
        return descriptor, 'data descriptor'
 
    if name in obj.__dict__:
        return obj.__dict__[name], 'instance attribute'
 
    if descriptor is not None:
        return descriptor, 'non-data descriptor'
    else:
        raise AttributeError
神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试

相关文章:

版权声明:wuyou2021-05-01发表,共计615字。
新手QQ群:570568346,欢迎进群讨论 Python51学习