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 = {}
),而且因为它在视觉上不同于声明属性,所以它也不需要在旁边添加注释占位符属性来解释它是继承的。
我有两个 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 = {}
),而且因为它在视觉上不同于声明属性,所以它也不需要在旁边添加注释占位符属性来解释它是继承的。