簡體   English   中英

Python 3.6通用類型提示

[英]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_AEXP_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聊天,並在那里問了問題。 答案是這個例子是正確的。 從此,我遵循這一點

  1. EXP_AEXP_B確實定義了相同類型的類型
  2. 構建#PC-182.4323.49的PyCharm只是不能很好地處理泛型類型的注釋。

暫無
暫無

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

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