擅长:python、mysql、java
<p>如果您只是想创建泛型类或函数,请看一下<a href="http://mypy.readthedocs.io/en/stable/generics.html" rel="nofollow noreferrer">documentation on mypy-lang.org about generic types</a>它相当全面,比标准库类型文档更详细。在</p>
<p>如果您正在尝试实现您的特定示例,有必要指出<a href="http://mypy.readthedocs.io/en/stable/kinds_of_types.html#type-aliases" rel="nofollow noreferrer">type aliases work with typevars</a>您可以简单地执行以下操作:</p>
<pre><code>from typing import Union, TypeVar, Tuple
T = TypeVar('T')
MaybeWrapped = Union[T, Tuple[T]]
def foo(x: int) -> MaybeWrapped[str]:
if x % 2 == 0:
return "hi"
else:
return ("bye",)
# When running mypy, the output of this line is:
# test.py:13: error: Revealed type is 'Union[builtins.str, Tuple[builtins.str]]'
reveal_type(foo(3))
</code></pre>
<p>但是,如果您试图用真正新的语义构造泛型类型,那么您很可能会走运。你剩下的选择是:</p>
<ol>
<li>构造某种定制类/元类的东西,pep484兼容的类型检查器可以理解并使用它。在</li>
<li>以某种方式修改您正在使用的类型检查器(例如,mypy有一个实验性的“插件”系统)</li>
<li>请求修改pep484以包含新的自定义类型(您可以通过在<a href="https://github.com/python/typing" rel="nofollow noreferrer">typing module repo</a>中打开一个问题来实现)。在</li>
</ol>