我想在Python中创建自己的参数化类型,用于类型提示:
class MaybeWrapped:
# magic goes here
T = TypeVar('T')
assert MaybeWrapped[T] == Union[T, Tuple[T]]
别管这个做作的例子;我如何实现这一点呢?我查看了Union和Optional的源代码,但它看起来像是一些我希望避免的低级黑客攻击。在
文档中唯一的建议来自example re-implementation of ^{__getitem__
方法,而不是类本身。在
如果您只是想创建泛型类或函数,请看一下documentation on mypy-lang.org about generic types它相当全面,比标准库类型文档更详细。在
如果您正在尝试实现您的特定示例,有必要指出type aliases work with typevars您可以简单地执行以下操作:
但是,如果您试图用真正新的语义构造泛型类型,那么您很可能会走运。你剩下的选择是:
正是
__getitem__
方法实现了所有的魔法。在这是用
[
和]
方括号订阅一个名称时调用的方法。在因此,您需要在类的类中使用一个
__getitem__
方法,即它的元类,它将获得括号内的任何内容作为参数。该方法负责动态创建(或检索缓存副本)要生成的任何内容,并将其返回。在我只是不太可能想象您希望如何进行类型暗示,因为类型库似乎涵盖了所有合理的情况(我想不出它们还没有涵盖的示例)。但是让我们假设您希望一个类返回其自身的副本,但是参数anotate作为它的
type_
属性:在交互式模式下尝试时,您可以:
^{pr2}$相关问题 更多 >
编程相关推荐