如何从模块中调用动态类中的函数?

时间:2012-01-26 05:48:54

标签: python

正常方式:

import ham
ham.eggs.my_func()
ham.sausage.my_func()

我多么想要“动态”的方式:

str = 'eggs'
ham.str.my_func()
str = 'sausage'
ham.str.my_funct()

同样的事情,但理想情况下我会如何在循环中使用它:

for x in ['eggs', 'sausage']
    ham.x.my_func()

基本上,我想要一个字符串告诉哪个类的my_func可以调用?

1 个答案:

答案 0 :(得分:5)

getattr(ham, x).my_func()

这从ham获取方法/事物(Python是鸭子类型),它被指定为属性,其名称是x的内容(如果x'foo' },然后它将是ham.foo),然后在那个

上调用my_func

如果ham没有正确名称的方法,您将获得例外。

顺便提一下,ham.str.my_func()的示例应为getattr(ham, str).my_func()

如果您希望真正以正确的方式执行此操作,您可以使用imp方法仅获取特定类型的成员,或使用其他内省。