通过 __dict__ 访问 Python 实例变量- 这样做是否错误?

16 投票
4 回答
8834 浏览
提问于 2025-04-16 10:12

如果我想查看一个对象的实例变量列表,我可以使用 myObject.__dict__.keys() 这个方法。我想用这个属性来打印出对象的所有实例变量。不过我有点犹豫,因为 __dict__ 是一个“秘密”属性,我不太明白这个脚注是什么意思。

那么,使用 myObject.__dict__ 这样做是错的吗?

4 个回答

4

你可以使用 dir 这个函数来列出一个对象的所有属性。

6

这个脚注是指一个模块__dict__属性。一个对象的__dict__属性没有这样的警告(文档)。

6

这个脚注的意思是,你不应该直接访问 __dict__,而是应该先检查你想要的功能或行为是否可用。

所以,不要像这样做:

if "__some_attribute__" in obj.__dict__:
    # do stuff

而是应该这样做:

try:
    obj.some_action_i_want_to_do(...)
except AttributeError:
    # doesn't provide the functionality I want

这样做的原因是,不同的对象可能会对某个操作提供不同的内部引用,但仍然能给你想要的结果。

如果你想列出一些“内部信息”,方便调试和查看当前对象的情况,那么使用 dir() 是正确的方法。

撰写回答