我创建了一个类型的类,因为我需要为基础使用变量。
如果我不提供__init__
方法,它可以正常工作,但当我提供方法时,我无法调用基数__init__
。
使用:
def constructor():
blah blah
api = importlib.import_module(xtype)
mc = type('mc', (api.aclass,), {})
obj = mv(**args)
return obj
不起作用,返回“SystemError: super(): __class__ cell not found
”
def constructor():
blah blah
api = importlib.import_module(xtype)
mc = type('mc', (api.aclass,), dict(__init__ = mc__init)
obj = mc(**args)
return obj
def mc_init(*args, **kwargs):
do_some_stuff
super().__init__(*args, **kwargs)
不起作用,稍后在创建对象时返回“Base mc.__init__ not called.
”:
def constructor():
global api
blah blah
api = importlib.import_module(xtype)
mc = type('mc', (api.aclass,), dict(__init__ = mc__init)
obj = mc(**args)
return obj
def mc_init(*args, **kwargs):
global api
do_some_stuff
api.aclass.__init__(*args, **kwargs)
x = constructor()
如何为基类调用 init ?
感谢。
答案 0 :(得分:1)
我很惊讶你的type
电话有效; bases
应该是一个元组((api.aclass,)
)。这只是一个错字吗?
您在{2}中的super()
电话不会在课堂声明之外发挥作用; Python 3 super
魔术相当复杂,说实话有点脆弱。你可以写super(mc, self).__init__(*args, **kwargs)
。
但是,你没有理由不在这里使用正确的类声明(特别是如果你不理解如何使用3参数type
);使用变量base声明类是完全正常的:
def constructor():
...
api = importlib.import_module(xtype)
class mc(api.aclass):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
obj = mc(**args)
return obj