我该如何使用类型提示指定参数的多个类型?

78

我有一个Python函数,可以接受XML数据作为str

为了方便起见,该函数还会检查xml.etree.ElementTree.Element是否存在,并在必要时自动转换为str

import xml.etree.ElementTree as ET

def post_xml(data: str):
    if type(data) is ET.Element:
        data = ET.tostring(data).decode()
    # ...

在类型提示中,能否指定参数可以作为两种类型之一提供?

def post_xml(data: str or ET.Element):
    # ...

3
这真的是一个重复吗?我的意思是,语法相同,但语义不同,对吧?我似乎记得有类似的说法,“函数应该在其输入上是逆变的,在其输出上是协变的”,这意味着一个可以接受多种类型的函数比一个可以返回多种类型的函数更有意义。 - wjandrea
1个回答

137

您想要一个类型union。对于Python 3.10+:

def post_xml(data: str | ET.Element):

对于早期版本:

from typing import Union

def post_xml(data: Union[str, ET.Element]):
    ...

Pycharm的参数信息将Union[str, ET.Element]解释为Union[str, Element, Element] - Stevoisiak
所以在 Python <= 9 中甚至不支持这个功能。 - Drizzle
@Drizzle 请再说一遍? - deceze

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接