Skip to main content
 首页 » 编程设计

python之如果 Python 的 obj.__dict__ 是一个属性,那么它是惰性求值的还是 Python 忙着组合它的

2025年05月04日26tuyile006

刚刚看了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))。但是不要将维护字典与显示它的行为混淆。无论打印与否,字典都存在。

正如评论中所讨论的,一个对象的字典可以包含指向其他对象的指针,每个对象都有自己的属性字典。