我有两个类看起来像这样:
class BaseClass(object):
def the_dct(self):
return self.THE_DCT
class Kid(BaseClass):
THE_DCT = {'vars': 'values'}
# Code i ll be running
inst = Kid()
print(inst.the_dct)
Run Code Online (Sandbox Code Playgroud)
继承必须这样; 第二类包含THE_DCT和第一类包含def the_dct.
它工作得很好,但我的问题是,我得到了Pycharm(未解析属性引用)的警告,大约THE_DCT在BaseClass.
dur*_*rsk 13
在BaseClass你的引用中self.THE_DCT,当PyCharm查看这个类时,它看到它THE_DCT不存在.
假设您将此视为抽象类,PyCharm不知道这是您的意图.它看到的只是一个访问属性的类,它不存在,因此它显示警告.
虽然你的代码运行得很好(只要你永远不会实例化BaseClass),你应该把它改为:
class BaseClass(object):
THE_DCT = {}
def the_dct(self):
return self.THE_DCT
Run Code Online (Sandbox Code Playgroud)
And*_*rew 10
除了现有答案之外,或者作为替代方案,您可以使用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'}
Run Code Online (Sandbox Code Playgroud)
我更喜欢这种方法,因为它不需要添加不必要的占位符属性 ( self.THE_DCT = {}),而且因为它在视觉上与声明属性不同,所以它还不需要在占位符属性旁边添加注释来解释它是继承的。
| 归档时间: |
|
| 查看次数: |
28095 次 |
| 最近记录: |