在python中在运行时创建对象

时间:2011-05-02 00:34:23

标签: python object dynamic runtime

如何在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

时获取“CL​​ASS B”

但是以更优雅和动态的方式(比如我在运行时向dict添加更多类)

2 个答案:

答案 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>