为了账号安全,请及时绑定邮箱和手机立即绑定

类 __init__ 混合了固定和可变长度 **kwargs 参数

类 __init__ 混合了固定和可变长度 **kwargs 参数

蝴蝶刀刀 2023-04-11 15:56:29
我有一个有两个必须有参数的类,我想为它提供一个可选参数的字典。我在 tensorflow optimizers中看到过类似风格的类定义。一个最小的例子是这样的:class Dataset:    def __init__(self, source, target, **kwargs):        self.source = source        self.target = target        self.shuffle = kwargs['shuffle']            def shuffle(self):        return self        if __name__ == "__main__":    source = [1, 2, 3, 4]    targets = [0, 0, 1, 1]        kwargs = {        'shuffle' : False,        'shift' : 10    }        trainset = Dataset(source, targets, kwargs)并产生错误:  File "test.py", line 20, in <module>    trainset = Dataset(source, targets, *kwargs)TypeError: __init__() takes 3 positional arguments but 5 were given除了帮助我修复错误之外,如果这种混合了固定参数和可变参数的类定义不是最佳实践,我将不胜感激。解决方案:在评论和回复之后,解决方案是使用Dataset(source, targets, **kwargs).
查看完整描述

1 回答

?
侃侃尔雅

TA贡献1801条经验 获得超15个赞

如果您将 **kwargs 传递给构造函数,它将起作用,您需要将 dict 元素解压缩到函数中。


查看完整回答
反对 回复 2023-04-11
  • 1 回答
  • 0 关注
  • 61 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信