覆盖 __init__ 中参数的类型提示
Override type-hint of a parameter in __init__
在此代码上:
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
.[=18 之间没有任何联系=]
在此代码上:
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
.[=18 之间没有任何联系=]