擅长:python、mysql、java
<p>您可以使用<code>typing.Union</code>,但是,听起来您确实想要<em>结构类型</em>而不是名义类型<a href="https://www.python.org/dev/peps/pep-0544/" rel="nofollow noreferrer">Python supports this using ^{<cd2>}</a>,它是python类型暗示系统支持的一部分,因此<code>mypy</code>将理解它,例如:</p>
<pre><code>import typing
class Fooable(typing.Protocol):
def foo(self) -> int:
...
class One(object):
def foo(self) -> int:
return 42
class Two(object):
def foo(self) -> int:
return 142
def factory(a: str) -> Fooable:
if a == "one":
return One()
return Two()
x = factory('one')
x.foo()
</code></pre>
<p>注意,结构化类型非常适合Python的duck类型风格。Python的类型系统既支持结构形式,也支持名义形式</p>