遍历foo.py模块内置属性时遇AttributeError问题咨询
问题原因与解决办法
这问题其实是Python属性访问机制的一个常见坑——你混淆了字面量属性名和动态变量对应的属性名!
让我拆解一下:
- 当你写
foo.attribute的时候,Python不会把它当成“变量attribute的值对应的属性”,而是直接去foo模块里找一个名叫"attribute"的属性——但你的模块里根本没有这个属性,自然就报AttributeError了。 - 你用
dir(foo)遍历出来的attribute是字符串类型(比如"__name__"、"__doc__"这些),它只是属性的名字,不是属性本身。
那正确的打开方式是什么?用Python内置的getattr()函数!这个函数专门用来通过字符串形式的属性名动态获取对象的属性。
修改后的代码应该是这样:
import foo for attribute in dir(foo): print(getattr(foo, attribute))
如果想同时看到属性名和对应的值,还可以优化成:
import foo for attribute in dir(foo): print(f"{attribute}: {getattr(foo, attribute)}")
简单总结:
- 用
.访问属性时,属性名必须是硬编码的字面量; - 要通过变量动态获取属性,就用
getattr(obj, attr_name)。
内容的提问来源于stack exchange,提问作者kubaSpolsky
相关产品推荐
相关产品推荐

