为什么不能在子类的__init__中传递* args和** kwargs

为什么不能在子类的__init__中传递* args和** kwargs,第1张

为什么不能在子类的__init__中传递* args和** kwargs

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方法的引用;从那里开始,这是一个 普通 方法,因此您需要传入 任何
方法都可以接受的参数。如果您的方法不接受关键字参数,则会出现异常。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5647304.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存