执行模块中的所有功能

时间:2013-06-29 12:27:09

标签: python

class MyClass(object):
    def fn():
        return 1

for i in [method for method in dir(inspect) if callable(getattr(inspect, method))]:
    print i(MyClass) // Error here

错误: TypeError:'str'对象不可调用

如果我将print statement更改为:

print "%s(MyClass)" % i

这只是打印:

ArgInfo(MyClass)
and so on...

2 个答案:

答案 0 :(得分:2)

dir(module)返回模块中定义的名称(字符串)列表,而不是实际的函数或值。要获取这些内容,请使用已用于getattr检查的callable

for name in dir(your_module):
    might_be_function = getattr(your_module, name)
    if callable(might_be_function):
        print might_be_function(your_parameters)

当然,可能仍然存在该函数不适用于给定参数的情况,因此您可能希望首先检查它,或者在try块中包装。

答案 1 :(得分:0)

您是否需要按名称调用所有方法?

class C1:
    def f1(self):
        print('f1---')
    def f2(self):
    print('f2---')

inspect = C1()
for i in [method for method in dir(inspect) if callable(getattr(inspect, method))]:
    getattr(inspect, i)()