【发布时间】:2022-01-24 12:54:09
【问题描述】:
关于此代码:
class Obj():
def a(self):
pass
class ObjChild(Obj):
def b(self):
pass
class A:
def __init__(self, obj: Obj):
self.obj = obj
class B(A):
def __init__(self, obj: ObjChild):
super().__init__(obj)
def kuku(self):
self.obj.b()
Pycharm 警告我最后一行:
类“Obj”的未解析属性引用“b”
但我将__init__ 中传递的obj 键入提示为ObjChild,因此它应该静态知道self.obj 是ObjChild 实例,并且将具有b方法。
我怎样才能让 Pycharm 意识到这一点?它弄乱了我在项目中的自动完成功能。
【问题讨论】:
-
在类级别添加
obj: ObjChild类型提示可能会修复它。 -
问题可能是 Pycharm 没有断定
super().__init__(obj)将self.obj设置为obj。一种解决方案可能是将self.obj.b()替换为obj.b()。 -
对我来说,你正在用一个你告诉它的类型为 obj 的类来初始化 A。那么你为什么期望 obj 类知道
b,因为它不是 obj 类的一部分,它只存在于 objChild 类中。继承起作用,objChild 将知道 obj 中的属性,但反之则不然 -
@md2perpe。这显然不是解决方案
-
@MadPhysicist。当我写下我的答案并且代码看起来不同时,这是一个解决方案。
标签: python pycharm overriding