Python对象的自省机制学习笔记

自省是通过一定的机制查询到对象的内部结构

__dict__

通过__dict__查询属性

class User:
    name = "Y4tacker"


class Student(User):
    def __init__(self, schoolname):
        self.schoolname = schoolname


if __name__ == '__main__':
    user = Student("aaa")
    # `__dict__查询属性`
    print(user.__dict__)

输出结果为{'schoolname': 'aaa'}但如果我们再加上这样一个语句print(user.name)居然把Y4tacker打印了出来,这是为什么呢?
因为name属于Person这个类,类也是对象,name是属于User里的一个属性,并不是User里的属性,在用.这个符号访问的时候它会向上查询,这与之前所提到的MRO一致,只是实例在查询的时候,它会根据MRO的一个数据结构查询到User而已,print(User.__dict__)会打印
{'__module__': '__main__', 'name': 'Y4tacker', '__dict__': <attribute '__dict__' of 'User' objects>, '__weakref__': <attribute '__weakref__' of 'User' objects>, '__doc__': None},为啥会多这么多,因为User是一个类,类比实例更加丰富

dir()

它会列出对象里的所有属性,只会打印出属性名称,而不显示属性的值

猜你喜欢

转载自blog.csdn.net/solitudi/article/details/106863111