Pycharm 关于未解析的属性引用的视觉警告

Pycharm visual warning about unresolved attribute reference

我有两个 class 是这样的:

class BaseClass:

    def the_dct(self):
        return self.THE_DCT


class Kid(BaseClass):

    THE_DCT = {'key': 'value'}


# Code i ll be running
inst = Kid()
print(inst.the_dct())

继承必须这样;第二个 class 包含 THE_DCT,第一个 class 包含 def the_dct.

它工作得很好,但我的问题是我在 Pycharm(未解析的属性引用)中收到警告,关于 BaseClass.

中的 THE_DCT

BaseClass 中您引用了 self.THE_DCT,但是当 PyCharm 查看此 class 时,它发现 THE_DCT 不存在。

假设您将其视为摘要 Class,PyCharm 不知道这是您的意图。它所看到的只是 class 访问一个不存在的属性,因此它显示警告。

尽管您的代码 运行 非常好(只要您从不实例化 BaseClass),您真的应该将其更改为:

class BaseClass(object):
    THE_DCT = {}

    def the_dct(self):
        return self.THE_DCT

除了现有的答案,或者作为替代,您可以使用 Type Hints。这满足了 PyCharm 的警告,并且还将属性区分为继承的(或者至少不是 class 的原生属性)。这就像在 class 的最顶部添加 THE_DCT: dict 一样简单(在其他任何事情之前)。

class BaseClass(object):
    THE_DCT: dict  # Add a type-hint at the top of the class, before anything else

    def the_dct(self):
        return self.THE_DCT


class Kid(BaseClass):
    THE_DCT = {'vars': 'values'}

我更喜欢这种方法,因为它不需要添加不必要的占位符属性 (self.THE_DCT = {}),而且因为它在视觉上不同于声明属性,所以它也不需要在旁边添加注释占位符属性来解释它是继承的。