2015-12-07 34 views
2

我想动态创建一个类使用type()并指定一个__init__构造函数调用super().__init__(...);然而,当super()被调用我收到以下错误:动态类继承使用超

TypeError: super(type, obj): obj must be an instance or subtype of type 

这里是我的代码:

class Item():  
    def __init__(self, name, description, cost, **kwargs): 
     self.name   = name 
     self.description = description 
     self.cost   = cost 
     self.kwargs   = kwargs 

class ItemBase(Item): 
    def __init__(self, name, description, cost): 
     super().__init__(name, description, cost) 

def __constructor__(self, n, d, c): 
    super().__init__(name=n, description=d, cost=c) 

item = type('Item1', (ItemBase,), {'__init__':__constructor__}) 
item_instance = item('MyName', 'MyDescription', 'MyCost') 

为什么super()__constructor__方法不理解对象参数;我该如何解决它?

回答

1

下面是我如何解决这个问题。我引用type()方法动态实例化变量引用一个类,如:

def __constructor__(self, n, d, c, h): 
    # initialize super of class type 
    super(self.__class__, self).__init__(name=n, description=d, cost=c, hp=h) 

# create the object class dynamically, utilizing __constructor__ for __init__ method 
item = type(item_name, (eval("{}.{}".format(name,row[1].value)),), {'__init__':__constructor__}) 
# add new object to the global _objects object to be used throughout the world 
self._objects[ item_name ] = item(row[0].value, row[2].value, row[3].value, row[4].value) 

可能有更好的方法来做到这一点,但我需要修复,这就是我想出了...使用如果可以的话。