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.Protocol
或typing.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 中生成一个未解析的属性引用的主要内容,如果未能解决你的问题,请参考以下文章