类型提示的自定义元类型

时间:2017-02-02 00:08:49

标签: python python-3.x generics type-hinting

我正在尝试定义用于typehinting的自定义元类型。例如

print(Tuple[int, str, bool])
print(CustomType[int, str, bool])
显然,第一行工作正常。我如何实现CustomType,以便它也可以工作?我试过这个:

class CustomType(Tuple):
    pass

并获取错误TypeError: __main__.CustomType is not a generic class。 我的目标是使用额外的classmethod

来专门化Tuple

1 个答案:

答案 0 :(得分:0)

AFAIK你可以这样做,但是以一种克制的形式,我不认为你可以指定可变数量的参数,而是指定args的确切数量。

当您将其作为基类提供时,您需要向Tuple提供一些类型变量:

from typing import Tuple, TypeVar
T1, T2, T3 = TypeVar('T1'), TypeVar('T2'), TypeVar('T3')

class CustomType(Tuple[T1, T2, T3]): 
    pass

print(CustomType[int, str, bool])
# __main__.CustomType[int, str, bool]

现在可以附加3种类型,您需要为CustomType(Tuple[T1, T2])类型创建2的自定义类型,依此类推。

另外,Tuple中添加了对Callable(和3.6+)子类化的支持,可用于{{1}}。