2024-06-28 14:46:35 发布
网友
我想写一个函数,它将创建一个在一个参数中指定的任何类的实例,并用任意数量的参数调用该类。在
这似乎行不通:
def spawn(tospawn, *args): global current_state current_state.instance.append(globals()[tospawn](*args))
我做错什么了?在
编辑:伙计们,我是个白痴。创建这个函数的原因是,那些不能访问其他类的类仍然可以创建它们的实例,但它们确实可以访问其他类。所以没关系。在
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)
不能从全局参数中获取类;tospawn是一个类型,而不是字符串。类型是第一类对象,您可以直接使用它们。在
tospawn
至于整个代码,我会用一个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()返回带字符串键的字典。有点像
globals()
from collection import deque args = range(20), 3 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))
不能从全局参数中获取类;
tospawn
是一个类型,而不是字符串。类型是第一类对象,您可以直接使用它们。在至于整个代码,我会用一个classmethod来代替。在
globals()
返回带字符串键的字典。有点像将工作,但下面将给出一个键错误
^{pr2}$因为deque是一个类型而不是字符串。在
也许你可以做些类似的事情:
相关问题 更多 >
编程相关推荐