作为通用类型的一部分的文字 -- python 键入
Literal as part of generic type -- python typing
假设我想在 Python 中设计一个 Array
数据类型。它旨在容纳特定类型的固定大小列表。
T = typing.TypeVar('T')
class Array(typing.Generic[T]):
l: list[T]
s: int
所以类型提示应该是这样的:
fixed_size_array: Array[int]
我想做的是在类型提示中包含 Array
的长度,例如:
fixed_size_array_of_five_ints: Array[int, 5]
fixed_size_array_of_four_ints: Array[int, 4]
我可以更改 Array
的实现,因为我唯一的要求是 Array[int, 5]
的类型提示或包含 literal/constant 大小的内容。
这可能吗?
您可以使用文字[...]:
T = typing.TypeVar('T')
S = typing.TypeVar('S')
class Array(typing.Generic[T, S]):
l: list[T]
s: S
def __init__(self, s: S):
self.l = []
#...
self.s = s
def typed_array_op(a: T, b: T) -> T:
return some_func(a, b)
#...
a2: Array[int, Literal[2]]
b2: Array[int, Literal[2]]
a3: Array[int, Literal[3]]
a2 = array(2)
a3 = array(2) # mypy error
typed_array_op(a2, b2)
typed_array_op(a2, a3) # mypy error
假设我想在 Python 中设计一个 Array
数据类型。它旨在容纳特定类型的固定大小列表。
T = typing.TypeVar('T')
class Array(typing.Generic[T]):
l: list[T]
s: int
所以类型提示应该是这样的:
fixed_size_array: Array[int]
我想做的是在类型提示中包含 Array
的长度,例如:
fixed_size_array_of_five_ints: Array[int, 5]
fixed_size_array_of_four_ints: Array[int, 4]
我可以更改 Array
的实现,因为我唯一的要求是 Array[int, 5]
的类型提示或包含 literal/constant 大小的内容。
这可能吗?
您可以使用文字[...]:
T = typing.TypeVar('T')
S = typing.TypeVar('S')
class Array(typing.Generic[T, S]):
l: list[T]
s: S
def __init__(self, s: S):
self.l = []
#...
self.s = s
def typed_array_op(a: T, b: T) -> T:
return some_func(a, b)
#...
a2: Array[int, Literal[2]]
b2: Array[int, Literal[2]]
a3: Array[int, Literal[3]]
a2 = array(2)
a3 = array(2) # mypy error
typed_array_op(a2, b2)
typed_array_op(a2, a3) # mypy error