Python 如何动态调用函数iside模块?

Python 如何动态调用函数iside模块?,python,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 我假设您的意思是希

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

例如:

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

我假设您的意思是希望通过名称访问这些类

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


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

我假设您的意思是希望按名称访问类

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


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

您是指类似的内容吗

>>> 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(对象):
...     通过
... 
>>>def foo(cls):
...     打印cls
... 
>>>随机输入
>>>classes={'Class1':Class1,'Class2':Class2}
>>>动态类=类['class%d'%random.randint(1,2)]
>>>foo(动态_类())

你的意思是这样的

>>> 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(对象):
...     通过
... 
>>>def foo(cls):
...     打印cls
... 
>>>随机输入
>>>classes={'Class1':Class1,'Class2':Class2}
>>>动态类=类['class%d'%random.randint(1,2)]
>>>foo(动态_类())

您必须更具体一点。也许还有一些代码示例?到目前为止,您尝试了什么?在Python中,您可以像其他任何对象一样传递类。Python是弱类型的。没有什么可以限制您将任何一种类型的对象传递给任何函数,您必须更具体一点。也许还有一些代码示例?到目前为止,您尝试了什么?在Python中,您可以像其他任何对象一样传递类。Python是弱类型的。没有什么可以限制您只将任何一种类型的对象传递给任何函数。我认为,如果您显式创建了由
locals()
返回的字典,那么这个示例将更有建设性。(+1)为了感谢您的努力(也是一个很好的示例),我认为如果您显式创建由
locals()
返回的字典,这个示例将更有建设性。(+1)感谢您的努力(也是一个很好的例子),我从未见过
vars(module)[classname]()
。是否有理由选择此选项而不是getattr?(或者这是另一个西红柿,西红柿的东西吗?)我有点喜欢
vars(modules)
,因为它类似于
globals()
——你可以用其中任何一个找到字典,所以剩下的都一样。否则,我想是口味的问题。我从未见过
vars(module)[classname]()
。是否有理由选择此选项而不是getattr?(或者这是另一个西红柿,西红柿的东西吗?)我有点喜欢
vars(modules)
,因为它类似于
globals()
——你可以用其中任何一个找到字典,所以剩下的都一样。否则,我想是口味的问题。