我有一个由多重继承定义的类。

class A:
    def __init__(self, x, y):
      self.x = x
      self.y = y

class AMixin:
    def __init__(self, *args, **kwargs):
      # do stuff
      super().__init__(*args, **kwargs)

class B(AMixin, A):
    pass

基本上,MIXIN类覆盖了B方法,但是从用户使用类__init__的角度来看,类B的签名与B相同。
由于我在MIXIN类中使用了A*args,所以**kwargs的初始化是基于B的构造函数(功能性)。
然而,林特并不知道这一点,他们会认为A的签名是Bargs,这是没有帮助的。
我认为这和让kwargs在检查inspect.signature时返回A的签名(而不是AMixin)是一个问题,但现在我检查B时得到的是:
from inspect import signature
signature(B).parameters.keys()
# odict_keys(['args', 'kwargs'])

如何使它返回B

最佳答案

b__init__类继承自AMixin类。即使AMixin正在用super()**args调用**kwargs,它的__init__函数也可以根据需要执行任何逻辑linter扩展函数内部运行的内容是没有意义的。

关于python - 使用Mixin时返回基类的签名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54029465/

10-12 22:45