我正在做一个循环:“for atribute in dir(foo):”
但是我不能使用“atribute”变量,因为它是 foo 的内置属性。这是为什么?
当
print(__name__) # <class 'str'>
和
for atribute in dir(foo):
print(atribute) # is <class 'str'> too
...那么为什么我会收到如下错误?
import foo
for atribute in dir(foo):
print(foo.atribute)
#AttributeError: module 'foo' has no attribute 'atribute'
当您尝试打印
foo.method
时,您正在尝试查找 method
对象的 foo
属性。该名称与您本地命名空间中已有的 method
变量无关。要查找名称位于 method
变量中的属性,请使用 getattr
:
for method in dir(foo):
print(getattr(foo, method))
您
for
陈述的方法,与foo
的方法不同。想象一下有一个清单;当您使用变量 x
对其进行迭代时,您显然无法做到 list.x
。以某种方式,你正在做这件事。从字符串获取属性的一种方法是使用 getattr
函数。在你的情况下,它会像这样使用:
import foo
for method in dir(foo):
print(getattr(foo, method))
这里是关于此功能的有用链接。
在
for
循环中,method
是一个 name
,它在每次迭代中引用不同的对象。
当您执行
foo.method
时,您正在尝试获取模块 foo
的属性,其文字名称为 method
,这不是您在循环中使用的名称 method
。如果您使用不同的属性,例如foo.bar
,这样你就更清楚了
现在,大概您想要获取循环变量
method
引用的属性,如果是这样,您需要 getattr
从字符串属性名称获取属性值。
dir
以字符串列表的形式返回属性,因此在每次迭代中,您都会获得由名称 method
引用的属性字符串对象的值:
for method in dir(foo):
print(getattr(foo, method))