动态实例化不同的python类

时间:2013-01-26 17:24:57

标签: python class instantiation

假设我有两个不同的类,其中有不同数量的参数:

class A(object):
    def __init__(self, arg1, arg2, arg3)
    ...

class B (object):
    def __init__(self, arg1, arg2)
    ....

有没有办法动态实例化这些类,因为参数的数量有所不同?

我会在这里给你更大的图片。我已经创建了一个XML解析器,它已成功解析XML文档中的所有信息,并根据标记名称将它们缓存到列表中(<room>将进入self.room,<item>将进入自我.item等...)

我不知道这是否真的是这样做的方式,但我想要做的是从他们尊重的列表中的每个单独的XML元素获取所有信息,从该信息创建Python对象,然后存储'他们成了一个词典。

# From XMLParser class
def objectify(self, iterator):
    dict = {}
    # I used elementtree to parse XML documents, 2nd argument of getattr
    # ends up being a capitalized string of iterator's tag name.
    # Ex, <room> becomes 'Room'
    Object = getattr(sys.modules[__name__], iterator.tag.capitalize())
    for element in iterator:
        dict[element.attrib['id']] = Object(...)

那么在动态实例化上面列出的不同类时,如何输入不同数量的参数?

我是否在正确的轨道附近?

2 个答案:

答案 0 :(得分:2)

这应该很简单:

klass = A
args = (a, b, c)
obj = klass(*args)

您可以将所有这些放入工厂函数或类中。

答案 1 :(得分:1)

我认为*args是你的朋友。它代表一个参数列表,因此可以处理这两个类的创建。