我知道Union
允许您指定逻辑或多种类型。我想知道是否有办法为逻辑做类似的事情,比如:
def foo(x: And[Bar, Baz]):
我知道一个选项就是明确定义一个继承自Bar
和Baz
的新类型,如下所示:
class BarAndBaz(Bar, Baz):
...
def foo(x: BarAndBaz):
在我的上下文中,该选项并不理想。
答案 0 :(得分:3)
基于@deceze和@JimFasarakisHilliard的有用评论:
出于所有意图和目的,您可以使用Union
,就好像And
一样,因为对于Bar
和Baz
类型,好的IDE应自动完成将变量声明为Union[Bar, Baz]
类型。
这样的事情也有助于提高可读性:
# IDE should treat And/Union equivalently; use And[T, U] to communicate
# that a variable is expected to be an instance of T *and* U, and
# Union[T, U] to communicate that it is expected to be an instance of T
# *or* U.
And = Union
在我的特定情况下,我的IDE(PyCharm)行为不正常,因为它需要更新和重启。