我有一个继承自其他两个类的类。这些是基类:
class FirstBase(object):
def __init__(self, detail_text=desc, backed_object=backed_object,
window=window, droppable_zone_obj=droppable_zone_obj,
bound_zone_obj=bound_zone_object,
on_drag_opacity=on_drag_opacity):
# bla bla bla
class SecondBase(object):
def __init__(self, size, texture, desc, backed_object, window):
# bla bla bla
这就是孩子:
class Child(FirstBase, SecondBase):
""" this contructor doesnt work
def __init__(self, **kwargs):
# PROBLEM HERE
#super(Child, self).__init__(**kwargs)
"""
#have to do it this TERRIBLE WAY
def __init__(self, size=(0,0), texture=None, desc="", backed_object=None,
window=None, droppable_zone_obj=[], bound_zone_object=[],
on_drag_opacity=1.0):
FirstBase.__init__(self, detail_text=desc, backed_object=backed_object,
window=window, droppable_zone_obj=droppable_zone_obj,
bound_zone_obj=bound_zone_object,
on_drag_opacity=on_drag_opacity)
SecondBase.__init__(self, size, texture, desc, backed_object, window)
我想用**kwargs
很好地解决这个问题,但是当我调用第一个注释掉的构造函数时,我得到了TypeError: __init__() got an unexpected keyword argument 'size'
。
有什么办法可以让它和**kwargs?
一起工作吗
因为
FirstBase.__init__
没有size
参数。您可以添加size
参数,也可以将**kwargs
添加到FirstBase.__init__
。您的问题是,您只尝试在子类中使用
super
。如果在基类中也使用
super
,那么这将起作用。每个构造函数将“吃掉”它所接受的关键字参数,而不是将它们传递给下一个构造函数。当调用object
的构造函数时,如果有任何关键字参数遗留在它上面,它将引发异常。如您所见,它可以工作,除非您传递一个虚假的关键字参数:
我不喜欢这个解决方案,但你可以这样做:
相关问题 更多 >
编程相关推荐