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

ryevplcw  于 2023-04-30  发布在  PyCharm
关注(0)|答案(2)|浏览(220)

我有两个类,看起来像这样:

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())

继承必须如此;第二类包含THE_DCT,第一类包含def the_dct
它工作得很好,但我的问题是我在PyCharm(未解析的属性引用)中得到了一个关于BaseClassTHE_DCT的警告。

  • 它警告我的原因是什么(比如我为什么要避免它)?
  • 有什么我应该做的不同吗?
kuuvgm7e

kuuvgm7e1#

除了现有答案之外,或者作为替代方案,您可以使用Type Hints。这满足了PyCharm的警告,并且还将属性区分为继承的(或者至少不是类的原生属性)。这就像在类的顶部添加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 = {}),而且由于它在视觉上与声明属性不同,它还可以消除在占位符属性旁边添加注解以解释它是继承的需要。

h7wcgrx3

h7wcgrx32#

BaseClass中,您引用self.THE_DCT,但当PyCharm查看该类时,它发现THE_DCT不存在。
假设您将其视为抽象类,PyCharm并不知道这是您的意图。它所看到的只是一个访问属性的类,而属性并不存在,因此它显示警告。
尽管你的代码可以运行得很好(只要你从来没有示例化BaseClass),但你真的应该把它改为:

class BaseClass(object):
    THE_DCT = {}

    def the_dct(self):
        return self.THE_DCT

相关问题