首页 > 解决方案 > 使用多个构造函数和 **kwargs 进行子类化

问题描述

我正在尝试使用多个构造函数(使用@classmethod构造函数)构建一个父类。一般来说,我对此没有问题,但这次我需要该__init__方法来获取来自每个不同构造函数的任意关键字参数,因此我无法提前指定它们。然后使用各种构造函数在整个代码中多次对此类进行子类化。问题是我似乎无法在子类中启动父类。我收到此错误:

TypeError: __init__() got an unexpected keyword argument 'var1'

这是一个复制我的错误的简化示例:

class Test:
    def __init__(self, **kwargs):
        for key, value in kwargs.items():
            setattr(self, key, value)

    @classmethod
    def from_args(cls, var1):
        return cls(var1=var1)


class SubTest(Test):
    def __init__(self):
        super(SubTest, self).from_args('pie')


if __name__ == '__main__':
    obj = SubTest()
    print(obj.var1)

标签: pythonpython-3.xoopkeyword-argumentsubclassing

解决方案


推荐阅读