1 回答

TA貢獻1874條經(jīng)驗 獲得超12個贊
要解決這個問題,只需鍵入您的get_self函數(shù),def get_self(self: S) -> S其中 S 是某種類型 var。
然后,以下程序將干凈地鍵入檢查:
from __future__ import annotations
from typing import Generic, TypeVar, cast
T = TypeVar("T")
# This can also be just 'S = TypeVar("S")', but that would mean
# we won't be able to use any methods of Foo inside of get_self.
S = TypeVar("S", bound="Foo")
class Foo(Generic[T]):
? ? def get_self(self: S) -> S:
? ? ? ? return self
class Bar:
? ? pass
class DFoo(Foo[Bar]):
? ? def do_something_get_self(self) -> DFoo:
? ? ? ? return self.get_self()
? ? def dfoo_adds_method(self) -> None:
? ? ? ? pass
dfoo = DFoo()
dfoo.do_something_get_self().dfoo_adds_method()
這樣做的原因是因為它總是可以覆蓋self. 雖然它通常會自動給出當前類的類型,但 PEP 484 實際上并不要求您堅持使用此默認值。
因此,我們將其設為通用,以確保輸出類型始終與當前子類型匹配。
添加回答
舉報