您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

为什么不能在子类的__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方法将需要具有Pythonstack关键字参数。如果找不到匹配的关键字参数,但**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方法的引用;从那里开始,这是一个 方法,因此您需要传入 任何 方法都可以接受的参数。如果您的方法不接受关键字参数,则会出现异常。

其他 2022/1/1 18:42:25 有447人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶