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

joh*_*ith 1 python

正常方式:

import ham
ham.eggs.my_func()
ham.sausage.my_func()
Run Code Online (Sandbox Code Playgroud)

我多么想要它"动态"的方式:

str = 'eggs'
ham.str.my_func()
str = 'sausage'
ham.str.my_funct()
Run Code Online (Sandbox Code Playgroud)

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

for x in ['eggs', 'sausage']
    ham.x.my_func()
Run Code Online (Sandbox Code Playgroud)

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

Bor*_*lid 5

getattr(ham, x).my_func()
Run Code Online (Sandbox Code Playgroud)

这得到方法/事情(Python是鸭键入)从ham它被指定为他的名字叫的内容的属性x(如果x是'foo'的话,那将是ham.foo),然后调用my_func上

如果ham没有正确名称的方法,您将获得异常.

顺便说一句,你的例子ham.str.my_func()应该是getattr(ham, str).my_func().

如果你想以正确的方式真正做到这一点,你可以使用该imp方法只获取某种类型的成员,或使用额外的内省.