繁体   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