在Python中创建具有任意参数的类的实例?
我想编写一个函数,该函数将创建在一个参数中指定的任何类的实例,并使用任意数量的参数调用该类 这似乎不起作用:在Python中创建具有任意参数的类的实例?,python,class,instance,Python,Class,Instance,我想编写一个函数,该函数将创建在一个参数中指定的任何类的实例,并使用任意数量的参数调用该类 这似乎不起作用: def spawn(tospawn, *args): global current_state current_state.instance.append(globals()[tospawn](*args)) 我做错了什么 编辑:伙计们,我是个白痴。创建此函数的原因是,那些无法访问其他类的类仍然可以创建它们的实例,但它们实际上可以访问其他类。所以没关系。你不能从glob
def spawn(tospawn, *args):
global current_state
current_state.instance.append(globals()[tospawn](*args))
我做错了什么
编辑:伙计们,我是个白痴。创建此函数的原因是,那些无法访问其他类的类仍然可以创建它们的实例,但它们实际上可以访问其他类。所以没关系。你不能从globals中获取类
tospawn
是一种类型,而不是字符串。类型是第一类对象,您可以直接使用它们
class MyClass(object):
def __init__(self, a, b, c, d=None):
print a, b, c, d
args, kwargs = [1,2], {'c':3, 'd':4}
tospawn = MyClass
tospawn(*args, **kwargs)
至于整个代码,我会用classmethod来代替
class Spawner:
__spawned__ = []
@classmethod
def spawn(cls, tospawn, *args, **kwargs):
obj = tospawn(*args, **kwargs)
cls.__spawned__.append(obj)
class TestClass:
def __init__(self, *args):
print args
Spawner.spawn(TestClass, "these", "are", "args")
print Spawner.__spawned__
globals()
返回带有字符串键的字典。差不多
from collection import deque
args = range(20), 3
a = globals()['deque'](*args)
将正常工作,但下面将给出一个关键错误
a = globals()[deque](*args)
因为deque是一个类型而不是字符串
也许你可以这样做:
def spawn(tospawn, *args):
global current_state
try:
current_state.instance.append(globals()[tospawn](*args))
except KeyError:
current_state.instance.append(tospawn(*args))
为什么不使用
eval
def spawn(tospawn, *args):
global current_state
current_state.instance.append(eval("{}(*{})".format(tospawn, args)))
您是否尝试过tospawn(*args)?或者
tospawn
是一个字符串吗?“这似乎不起作用”——详细说明。你有什么错误?错误的确切文本是什么?Tospawn是一个字符串,但会有一个同名的类。这里是错误:AttributeError:'module'对象没有属性'instance',我认为这不起作用,因为我正在向该函数传递一个字符串(与类同名)作为第一个参数。如果我使用tospawn(*args),它将查找名为tospawn的类,而不是与tospawn的值同名的类。