如何动态调用模块内的函数?

时间:2012-07-13 21:19:30

标签: python

如何动态调用(代码)模块中的函数?

例如:

class Class1(object):
    pass

class Class2(object):
    pass

# here I want to either instantiate object dynamically or dynamically pass 
# a Class1 or Class2 object to some other method/class inside this module code

2 个答案:

答案 0 :(得分:4)

你的意思是这样的吗?

>>> class Class1(object):
...     pass
... 
>>> class Class2(object):
...     pass
... 
>>> def foo(cls):
...     print cls
... 
>>> import random
>>> classes = {'Class1': Class1, 'Class2': Class2}
>>> dynamic_class = classes['Class%d' % random.randint(1, 2)]
>>> foo(dynamic_class())
<__main__.Class1 object at 0x10b44ab50>

答案 1 :(得分:2)

我假设您的意思是要按名称访问这些类。

如果您想要的类位于同一模块中,请尝试globals()[classname]()来实例化该类。如果它在另一个模块中,请尝试vars(module)[classname]()getattr(module, classname)()

classname是一个包含类名称的字符串; module是对模块的引用,而不是字符串。)