代码之家  ›  专栏  ›  技术社区  ›  kurtgn

mixin中的super()`

  •  1
  • kurtgn  · 技术社区  · 6 年前

    当我创建一个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
    

    Too many arguments for "__init__" of "object"
    

    *args **kwargs object 的构造函数签名;但这是一个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())
    
    0 回复  |  直到 6 年前