在Python中如何用任意参数创建类的实例?
我想写一个函数,这个函数可以根据一个参数创建指定类的实例,并且可以用任意数量的参数来调用这个类。
这段代码似乎不太行:
def spawn(tospawn, *args):
global current_state
current_state.instance.append(globals()[tospawn](*args))
我哪里搞错了呢?
补充说明:我真是个傻瓜。写这个函数的原因是为了让一些没有权限访问其他类的类,仍然能够创建这些类的实例,但实际上它们是可以访问其他类的。所以算了。
4 个回答
0
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,不知道该如何解决。为了帮助大家更好地理解这些问题,很多人会在网上提问,比如在StackOverflow这样的平台上。
在这些问题中,提问者通常会描述他们遇到的具体情况,可能会附上代码片段,像
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)
这样的占位符,表示他们的代码部分。这些代码片段可以帮助其他人更好地理解问题的背景,从而提供更有效的帮助。
总之,提问和分享代码是编程学习中非常重要的一部分,能够帮助我们更快地找到解决方案,提升我们的技能。
0
你不能从全局变量中获取这个类;tospawn
是一种类型,而不是字符串。类型是第一类对象,你可以直接使用它们。
至于整个代码,我个人会用类方法来处理这个问题。
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__
0
为什么不使用 eval
呢?
def spawn(tospawn, *args):
global current_state
current_state.instance.append(eval("{}(*{})".format(tospawn, args)))