gpt4 book ai didi

python - 覆盖 __init__ 中参数的类型提示

转载 作者:行者123 更新时间:2023-12-05 03:32:32 28 4
gpt4 key购买 nike

关于这段代码:

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 警告我最后一行:

Unresolved attribute reference 'b' for class 'Obj'

但我将 __init__ 中传递的 obj 类型提示为 ObjChild,因此它应该静态地知道 self.obj 是一个 ObjChild 实例,并且有 b 方法。

我怎样才能让 Pycharm 意识到这一点?它打乱了我在项目中的自动完成。

最佳答案

使 A 成为 Generic:

from typing import Generic, TypeVar


class Obj:
def a(self):
pass


_Obj = TypeVar('_Obj', bound=Obj)


class ObjChild(Obj):
def b(self):
pass


class A(Generic[_Obj]):
def __init__(self, obj: _Obj):
self.obj = obj


class B(A[ObjChild]):
def __init__(self, obj: ObjChild):
super().__init__(obj)
self.obj.b()

除非您将 A 设为泛型,否则将 ObjChild 传递给 A.__init__A.obj< 之间没有任何联系 是一个 ObjChild

关于python - 覆盖 __init__ 中参数的类型提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70463616/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com