我需要得到一个模块中所有对象的列表——而不仅仅是它们的名称列表。例如,我有:
class myClass:
def __init__(self):
# here be code
pass
class thing1(myClass):
def __init__(self):
self.x = 1
class thing2(myClass):
def __init__(self):
self.x = 2
等等。
我想要的是给我一个myClass
(thing1
,thing2
)中的对象列表,从中我可以调用方法/获取属性。我想做这样的事:
for myThing in dir(myClass):
print myThing.x
但是dir
函数只给出类的名称列表,我无法从中获取属性。
我该怎么做?
我相信
locals()
为您提供了一个包含所有局部变量及其指向的对象的字典。您还可以尝试使用
eval()
或exec()
函数将名称计算为原始python代码。然后可以直接使用dir()
的结果。如果您真的想要类、实例或模块的成员,只需使用
vars()
内置:http://docs.python.org/library/functions.html#vars(它可以像广告中那样工作)如果您希望当前模块的成员来自函数或类(其中
vars()
将做错误的事情),那么应该改用globals()
。但是,问题中的代码和单词不匹配。你说你想访问“
myClass
”中的对象,但是你发布的代码显然是在寻找myClass
的子类,而不是它的内容。为了补充星号的答案,在交互式提示下使用此选项的更多示例:
注意在模块级、每个类对象和每个类实例上可见的内容之间的差异。
还要注意,对于给定的类定义,
vars()
不会告诉您任何继承的方法。它也不会告诉您通过类实例可用的方法。要正确地看到这两个属性,最好的方法是按照Noufal的建议执行,并遍历dir()
,为每个属性调用getattr()
。如果字符串中有属性的名称,则应使用
getattr
将其提取出来。给定一个模块X,您可以使用类似的东西获得它的所有属性和(例如)它们的类型的列表。
相关问题 更多 >
编程相关推荐