迭代 foo.py 模块的内置属性。出错了
Iterating over built-in atributes of foo.py module. Got an error
我正在循环:"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'
您for
声明的方法与foo
的方法不同。想象一下有一个列表;当你用变量 x
遍历它时,你显然不能做 list.x
。以某种方式,你正在这样做。从字符串中获取属性的一种方法是 getattr
函数。在你的情况下,它会像这样使用:
import foo
for method in dir(foo):
print(getattr(foo, method))
Here 关于这个函数很有用 link。
当您尝试打印 foo.method
时,您正在尝试查找 foo
对象的 method
属性。该名称与本地名称空间中已有的 method
变量无关。要查找名称在 method
变量中的属性,请使用 getattr
:
for method in dir(foo):
print(getattr(foo, method))
在for
循环中,method
是一个name
,它在每次迭代中引用不同的对象。
当您执行 foo.method
时,您正在尝试获取模块 foo
的属性,其字面名称为 method
,这不是您创建的名称 method
在循环中使用。如果您使用不同的属性,例如foo.bar
,这样你就更清楚了
现在,您可能想要获取循环变量 method
所指的属性,如果是这样,您需要 getattr
从字符串属性名称中获取属性值。
dir
returns 属性作为 字符串列表 ,因此在每次迭代中,您将获得名称引用的属性字符串对象的值method
:
for method in dir(foo):
print(getattr(foo, method))
我正在循环:"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'
您for
声明的方法与foo
的方法不同。想象一下有一个列表;当你用变量 x
遍历它时,你显然不能做 list.x
。以某种方式,你正在这样做。从字符串中获取属性的一种方法是 getattr
函数。在你的情况下,它会像这样使用:
import foo
for method in dir(foo):
print(getattr(foo, method))
Here 关于这个函数很有用 link。
当您尝试打印 foo.method
时,您正在尝试查找 foo
对象的 method
属性。该名称与本地名称空间中已有的 method
变量无关。要查找名称在 method
变量中的属性,请使用 getattr
:
for method in dir(foo):
print(getattr(foo, method))
在for
循环中,method
是一个name
,它在每次迭代中引用不同的对象。
当您执行 foo.method
时,您正在尝试获取模块 foo
的属性,其字面名称为 method
,这不是您创建的名称 method
在循环中使用。如果您使用不同的属性,例如foo.bar
,这样你就更清楚了
现在,您可能想要获取循环变量 method
所指的属性,如果是这样,您需要 getattr
从字符串属性名称中获取属性值。
dir
returns 属性作为 字符串列表 ,因此在每次迭代中,您将获得名称引用的属性字符串对象的值method
:
for method in dir(foo):
print(getattr(foo, method))