正常方式:
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调用?
最佳答案
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
方法仅获取特定类型的成员,或使用其他自省。关于python - 如何从模块的动态类中调用函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9014395/