mixin中的super()`

2024-10-01 07:10:42 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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看来是错误的,因为它说:

^{pr2}$

我明白了,在object的构造函数签名中没有*args或{};但这是一个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


class ParentObj:

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


class ChildObj(ExtraValuemixin, ParentObj):
    pass


obj = ChildObj(value=5)

print(obj.retrieve_extra_value())

Tags: selfnoneinitvaluedefargssomemixin