刚刚看了Python的__dict__其实是一个属性,不是方法。 vars(obj) 与 obj.__dict__ 相同。
如果 __dict__ 是一个属性,那么 Python 是主动维护它(似乎不太可能),还是懒惰地组合它——以及如何?
请您参考如下方法:
我想象的方式是对象将其属性存储在字典中,您可以通过访问它
obj.__dict__
那是字典,不是字符串。 print(obj.__dict__) 或 str(obj.__dict__) 从字典创建字符串。
属性也可以通过名称访问,这被翻译成方法调用,以及(有效地)字典访问。
obj.a => obj.__getattr__('a') <=> obj.__dict__['a']
正如您所注意到的,vars(obj) 是获取该字典的另一种方式。
解释器维护着大量的字典,包括一个附加到每个对象的字典(除了少数异常(exception))。但是不要将维护字典与显示它的行为混淆。无论打印与否,字典都存在。
正如评论中所讨论的,一个对象的字典可以包含指向其他对象的指针,每个对象都有自己的属性字典。
