正常方式:
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可以调用?
答案 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
方法仅获取特定类型的成员,或使用其他内省。