mixins中的super().__ init __(....)失败,原因是“对象”的“ __init__”的参数过多。

时间:2018-11-12 14:21:59

标签: python mypy

当我创建一个扩展__init__逻辑的mixin类时,通常要做的是:

class ExtraValuemixin:

    def __init__(self, *args, **kwargs)  -> None:
        super().__init__(*args, **kwargs)
        # some extra initialization
        self._extra_value = 1

    def retrieve_extra_value(self):
        return self._extra_value

但是,对于mypy来说,这似乎是错误的,

Too many arguments for "__init__" of "object"

我明白了,*args的构造函数签名中没有**kwargsobject;但这是一个mixin,它依赖于其子级的构造函数。我该如何让mypy理解这一点?

完整示例:

class ExtraValuemixin:

    def __init__(self, *args, **kwargs)  -> None:
        super().__init__(*args, **kwargs)
        # some extra initialization
        self._extra_value = 1

    def retrieve_extra_value(self):
        return self._extra_value


class ParentObj:

    def __init__(self, value):
        self.value = value


class ChildObj(ExtraValuemixin, ParentObj):
    pass


obj = ChildObj(value=5)

print(obj.retrieve_extra_value())

0 个答案:

没有答案