在Python中用任意参数创建一个类的实例?

2024-06-28 14:46:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我想写一个函数,它将创建一个在一个参数中指定的任何类的实例,并用任意数量的参数调用该类。在

这似乎行不通:

def spawn(tospawn, *args):
    global current_state
    current_state.instance.append(globals()[tospawn](*args))

我做错什么了?在

编辑:伙计们,我是个白痴。创建这个函数的原因是,那些不能访问其他类的类仍然可以创建它们的实例,但它们确实可以访问其他类。所以没关系。在


Tags: 实例instance函数编辑参数数量defargs
3条回答
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是一个类型,而不是字符串。类型是第一类对象,您可以直接使用它们。在

至于整个代码,我会用一个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)

将工作,但下面将给出一个键错误

^{pr2}$

因为deque是一个类型而不是字符串。在

也许你可以做些类似的事情:

def spawn(tospawn, *args):
    global current_state
    try:
        current_state.instance.append(globals()[tospawn](*args))
    except KeyError:
        current_state.instance.append(tospawn(*args))

相关问题 更多 >