[英]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.