[英]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 警告我最后一行:
class 'Obj' 的未解析屬性參考 'b'
但是我將在__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
之間沒有任何聯系。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.