栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/641509.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号