调用类的方法,classname是一个变量

时间:2011-04-05 22:55:56

标签: python

我提出了这个解决方案。但这看起来太复杂了。必须有一种更好,更简单的方法。第二:有没有办法动态导入类?

class_name = "my_class_name"                # located in the module : my_class_name.py  
import my_class_name from my_class_name          

my_class = globals()[class_name]  
object = my_class()  
func = getattr(my_class,"my_method")
func(object, parms)                         # and finally calling the method with some parms

1 个答案:

答案 0 :(得分:1)

查看__import__内置函数。它完全符合您的预期。

编辑:正如所承诺的,这是一个例子。不是一个非常好的,我只是有点坏消息,我的头脑在其他地方,所以你可能会写一个更智能的,更具实际应用的背景。至少,它说明了这一点。

>>> def getMethod(module, cls, method):
...     return getattr(getattr(__import__(module), cls), method)
... 
>>> getMethod('sys', 'stdin', 'write')
<built-in method write of file object at 0x7fcd518fa0c0>

编辑2:这是一个更聪明的人。

>>> def getMethod(path):
...     names = path.split('.')
...     return reduce(getattr, names[1:], __import__(names[0]))
... 
>>> getMethod('sys.stdin.write')
<built-in method write of file object at 0x7fdc7e0ca0c0>

你还在吗?