如何为返回多种可能数据类型的函数记录 :rtype:? [复制]

Posted

技术标签:

【中文标题】如何为返回多种可能数据类型的函数记录 :rtype:? [复制]【英文标题】:How do I document :rtype: for a function that returns multiple possible data types? [duplicate] 【发布时间】:2016-09-30 22:34:31 【问题描述】:

在 Python 文档字符串中,应该如何记录 :rtype: 以获取可以返回多种可能数据类型的函数?

例如,如果一个函数可以根据函数参数返回defaultdict OR dict OR list,你如何记录这个?

代码示例:

from collections import defaultdict

def read_state(state_file, state_file_type='defaultdict'):
    """Deserialize state file or create empty state and return it.

    :param state_file: The path and file name of state file to read.
    :type state_file: str
    :param state_file_type: Data type in which state is stored.
    :type state_file_type: str
    :return: Current or new empty state.
    :rtype: ????? 
    """
    if os.path.exists(state_file):
        with open(state_file) as conf_fo:
            state = json.load(conf_fo)
    elif state_file_type == 'defaultdict':
        state = defaultdict(lambda: defaultdict(list))
    elif state_file_type == 'dict':
        state = 
    elif state_file_type == 'list':
        state = []
    else:
        raise TypeError("State file type not defined.")
    return state

【问题讨论】:

这显然不是问题 33945261 的重复,甚至在任何答案中都没有。它专门询问 :rtype: 文档字符串,而不是 3.5+ 类型注释(使用 ->),这是另一个问题所涵盖的内容。 【参考方案1】:

您可以在 rtype 中显式使用“或”

:rtype: collections.defaultdict or dict or list

变体

:rtype: collections.defaultdict | dict | list

【讨论】:

【参考方案2】:

我想我是偶然发现了一个类似的问题:How to specify multiple return types using type-hints

:rtype: 可以

:rtype: Union[collections.defaultdict, dict, list]

【讨论】:

以上是关于如何为返回多种可能数据类型的函数记录 :rtype:? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Java 中的异常记录尽可能多的信息?

如何为具有不同类型键的对象编写 JSDoc?

如何为具有多种父类型的子场景编写 EF 代码优先映射

Google Places API 网络服务:如何为自动完成设置多种类型

C#中如何为一个有返回值的函数添加新线程

通用 DAO 如何为所有不同的 DAO 实现返回相同的类型?