你Foo.__init__()
不会 不 支持任意关键字参数。您可以添加**kw
其签名以使其接受它们:
class Foo(object):
def __init__(self, value1, value2, **kw):
print 'I think something is being called here'
print value1, value2, kw
关键字参数仅与关键字名称完全匹配的参数匹配;您的Foo
方法将需要具有Python
和stack
关键字参数。如果找不到匹配的关键字参数,但**kw
参数为 ,则将它们收集在该参数中。
如果您的子类知道父类仅具有 位置 参数,则可以随时传递位置:
class MyFoo(Foo):
def __init__(self, *args, **kwargs):
# do something else, don't care about the args
print args, kwargs
while len(args) < 2:
args += kwargs.popitem()
super(MyFoo, self).__init__(*args[:2])
现在您 必须 在其中传递两个或多个参数才能MyFoo
使调用正常工作。
本质上,super().methodname
返回对bound方法的引用;从那里开始,这是一个 方法,因此您需要传入 任何 方法都可以接受的参数。如果您的方法不接受关键字参数,则会出现异常。