猿问

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

我有一个有两个必须有参数的类,我想为它提供一个可选参数的字典。我在 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).


蝴蝶刀刀
浏览 89回答 1
1回答

侃侃尔雅

如果您将 **kwargs 传递给构造函数,它将起作用,您需要将 dict 元素解压缩到函数中。
随时随地看视频慕课网APP

相关分类

Python
我要回答