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()
——你可以用其中任何一个找到字典,所以剩下的都一样。否则,我想是口味的问题。