这不是我期望看到的结果:
class A(dict):
def __init__(self, *args, **kwargs):
self['args'] = args
self['kwargs'] = kwargs
class B(A):
def __init__(self, *args, **kwargs):
super(B, self).__init__(args, kwargs)
print 'Instance A:', A('monkey', banana=True)
#Instance A: {'args': ('monkey',), 'kwargs': {'banana': True}}
print 'Instance B:', B('monkey', banana=True)
#Instance B: {'args': (('monkey',), {'banana': True}), 'kwargs': {}}
Run Code Online (Sandbox Code Playgroud)
我只是想让类A和B设置一致的值.我不确定为什么要将kwargs插入到args中,但我要假设我要么__init__()从子类中调用错误,要么我正在尝试做一些你不能做的事情.
有小费吗?
Amb*_*ber 14
试试这个:
super(B, self).__init__(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
由于A的init函数期望实际的args/kwargs(而不仅仅是两个参数),你必须实际传递args/kwargs的解压缩版本,以便它们能够正确地重新打包.
否则,已经打包的args和kwargs的dict列表被重新打包为一个带有两个元素的args列表,以及一个空的kwargs dict,因为你传递的是一个列表和一个dict,而不是实际的未命名和命名的参数.