如何在python中在运行时创建对象实例?
说我有2个班级:
class MyClassA(object):
def __init__(self, prop):
self.prop = prop
self.name = "CLASS A"
def println(self):
print self.name
class MyClassB(object):
def __init__(self, prop):
self.prop = prop
self.name = "CLASS B"
def println(self):
print self.name
和dict
{('a': MyClassA), ('b': MyClassB)}
我如何根据我选择'a'或'b'创建动态的两个类之一的实例。
有点这样:
somefunc(str):
if 'a': return new MyClassA
if 'b': return new MyClassB
在致电:somefunc('a').println
但是以更优雅和动态的方式(比如我在运行时向dict添加更多类)
答案 0 :(得分:6)
您可以创建一个调度程序,它是一个字典,您的键映射到类。
dispatch = {
"a": MyClassA,
"b": MyClassB,
}
instance = dispatch[which_one]() # Notice the second pair of parens here!
答案 1 :(得分:2)
通过调用类来创建类实例。你的类dict {('a': MyClassA), ('b': MyClassB)}
返回类;所以你只需要打电话给班级:
classes['a']()
但我觉得你想要更具体的东西。这是dict
的子类,当使用键调用时,查找关联的项并调用它:
>>> class ClassMap(dict):
... def __call__(self, key, *args, **kwargs):
... return self.__getitem__(key)(*args, **kwargs)
...
>>> c = ClassMap()
>>> c['a'] = A
>>> c['b'] = B
>>> c('a')
<__main__.A object at 0x1004cc7d0>