Mixin 方法 super() 调用在 PyCharm 中生成一个未解析的属性引用

Posted

技术标签:

【中文标题】Mixin 方法 super() 调用在 PyCharm 中生成一个未解析的属性引用【英文标题】:Mixin Method super() call generates a Unresolved Attribute Reference in PyCharm 【发布时间】:2020-03-05 13:16:19 【问题描述】:

在 PyCharm 中,我有一些如下所示的代码:

class Mixin:
    def get_form_kwargs(self):
        kwargs = super().get_form_kwargs()
        kwargs.update('foo': 'bar')
        return kwargs

linter 在super() 调用中提出了Unresolved attribute reference 'get_form_kwargs' for class 'object' 的问题。这个问题 100% 正确,但对 mixin 没有帮助。我们有很多具有这种super() 模式的mixin。

我知道属性的解决方案,但不是可以为这些未定义的类属性声明类型的方法。例如:

class Mixin:
    foo:str

我很好奇是否有任何类似的方法可以帮助 linter 识别 mixin。

谢谢!

【问题讨论】:

我认为关键可能是暗示超类,或者至少暗示超类不是object。我在使用typing.Protocoltyping.Generic 作为mixin 类的一部分方面取得了一些成功,例如Mixin(Protocol): ...;但是,我对建议将其用作明确答案的含义知之甚少。 这能回答你的问题吗? How do I correctly add type-hints to Mixin classes? 【参考方案1】:

试试这个代码:

class Mixin:
    def get_form_kwargs(self):
        get_form_kwargs_method = getattr(super(), "get_form_kwargs")
        if get_form_kwargs_method and callable(get_form_kwargs_method):
            kwargs = get_form_kwargs_method()
        else:
            kwargs = 
        kwargs.update('foo': 'bar')
        return kwargs

【讨论】:

以上是关于Mixin 方法 super() 调用在 PyCharm 中生成一个未解析的属性引用的主要内容,如果未能解决你的问题,请参考以下文章

Java 接口 Cloneable

使用 Nuxt.js 从页面组件的 asyncData() 方法调用 mixin 函数

Vue中mixin的用法

Mixin覆盖继承的方法

在目标 c 中调用 super.super 上的方法?

super调用其他类的方法