簡體   English   中英

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

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.objObjChild之間沒有任何聯系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM