【发布时间】:2020-07-29 10:26:04
【问题描述】:
我有一个有两个必须有参数的类,我想为它提供一个可选参数字典。我在 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)。
【问题讨论】:
-
在字典前面加上
**以将其解压缩为函数的关键字参数 -Dataset(source, targets, **kwargs)
标签: python