用于类型提示的自定义元类型

Posted

技术标签:

【中文标题】用于类型提示的自定义元类型【英文标题】:custom metatype for type hinting 【发布时间】:2017-06-18 22:21:05 【问题描述】:

我正在尝试定义一个自定义元类型以用于类型提示。例如

print(Tuple[int, str, bool])
print(CustomType[int, str, bool])

显然,第一行工作正常。我将如何实现CustomType,以便它也可以工作?我试过这个:

class CustomType(Tuple):
    pass

并得到错误TypeError: __main__.CustomType is not a generic class。 我的目标是通过额外的类方法对 Tuple 进行专业化

【问题讨论】:

【参考方案1】:

AFAIK 你可以做到这一点,但以一种受限制的形式,我认为你不能指定可变数量的参数,而是指定确切的参数数量。

当您将 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 类型创建自定义类型,依此类推。

顺便说一句,Issue 299 中添加了对子类化 Tuple(和 Callable)的支持,并且可用于 3.6+

【讨论】:

以上是关于用于类型提示的自定义元类型的主要内容,如果未能解决你的问题,请参考以下文章

带有元框字段的自定义文章类型

用于显示距当前日期超过 8 个月的 WordPress 自定义帖子类型的自定义查询

Wordpress - 特色图像元框未显示在自定义帖子类型上

Java和C#中的自定义元数据

自定义类型转换

python的自定义函数(函数类型defrangererun)