[英]Python 3.6 Generic Type Hints
我試圖圍繞泛型類型提示。 閱讀PEP 483中的這一部分 ,我得到的印象是
SENSOR_TYPE = TypeVar("SENSOR_TYPE")
EXP_A = Tuple[SENSOR_TYPE, float]
class EXP_B(Tuple[SENSOR_TYPE, float]):
...
EXP_A
和EXP_B
應標識相同的類型。 但是,在PyCharm#PC-181.4203.547中,只有EXP_B
按預期工作。 在調查之后,我注意到EXP_B
具有__dict__
成員,而EXP_A
沒有。
這讓我想知道, 這兩種類型的定義實際上是什么意思?
編輯:我最初的目標是設計一個2元組的泛型類EXP
,其中第二個元素總是一個float
,第一個元素類型是變量。 我想使用此泛型類的實例,如下所示
from typing import TypeVar, Tuple, Generic
T = TypeVar("T")
class EXP_A(Tuple[T, float]):
...
EXP_B = Tuple[T, float]
V = TypeVar("V")
class MyClass(Generic[V]):
def get_value_a(self, t: EXP_A[V]) -> V:
return t[0]
def get_value_b(self, t: EXP_B[V]) -> V:
return t[0]
class StrClass(MyClass[str]):
pass
instance = "a", .5
sc = StrClass()
a: str = sc.get_value_a(instance)
b: str = sc.get_value_b(instance)
(PEP 484中關於用戶定義的泛型類型的部分將EXP
這個定義描述為與原始代碼示例中的EXP_B
等效。)
問題是PyCharm抱怨instance
的類型作為參數:
Expected type EXP (matched generic type EXP[V]), got Tuple[str, float] instead`. With `EXP = Tuple[T, float]` instead, it says: `Expected type 'Tuple[Any]' (matched generic type Tuple[V]), got Tuple[str, float] instead.
我按照@ Michael0c2a的建議,前往python打字gitter聊天,並在那里問了問題。 答案是這個例子是正確的。 從此,我遵循這一點
EXP_A
和EXP_B
確實定義了相同類型的類型
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.