动态实例化不同的python类

动态实例化不同的python类,python,class,instantiation,Python,Class,Instantiation,假设我有两个不同的类,具有不同数量的参数: class A(object): def __init__(self, arg1, arg2, arg3) ... class B (object): def __init__(self, arg1, arg2) .... 如果参数的数量不同,有没有一种方法可以动态实例化这些类 我会给你一个更大的图景。我创建了一个XML解析器,它成功地解析了XML文档中的所有信息,并根据标记名将它们缓存到列表中(将进入self.ro

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

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

class B (object):
    def __init__(self, arg1, arg2)
    ....
如果参数的数量不同,有没有一种方法可以动态实例化这些类

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

我不知道这是否真的是做事情的方式,但我试图做的是从他们所尊重的列表中的每个XML元素中获取所有信息,从这些信息创建Python对象,然后将它们存储到dict中

# 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(...)
来自XMLParser类的
#
def objectify(self、迭代器):
dict={}
#我使用elementtree解析XML文档,这是getattr的第二个参数
#最后是迭代器标记名的大写字符串。
#例如,变为“房间”
Object=getattr(sys.modules[\u\u name\u],iterator.tag.capitalize())
对于迭代器中的元素:
dict[element.attrib['id']]=对象(…)
那么,在动态实例化上面列出的不同类时,如何输入不同数量的参数呢


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

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

这应该很容易:

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

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

使用
apply
(它需要一个参数元组和一个关键字参数字典,并调用一个函数)它会这样做,但是如果您知道您正在调用
a
,那么您不需要传递一个参数元组(理论上)参数大小未知。@WaleedKhan:OP询问动态实例化,所以我假设他事先不知道这个类。这是factory模式的典型用例。