0
点赞
收藏
分享

微信扫一扫

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()

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


举报

相关推荐

0 条评论