python - PEP 484 的动态返回类型

标签 python type-hinting pep

假设我有一个函数会根据字符串输入参数返回一个类,如下所示:

def foo(bar):
    if bar == 'baz':
        return Baz()
    else:
        return Buz()

在这种情况下,BazBuz 都是 Biz 的子类,但每个都有许多不同的功能,因此声明返回类型作为父类(super class)并不是特别有用。假设我不在乎我的 .pyi 文件是否丑陋,我有什么方法可以声明为给定输入返回哪个子类?

最佳答案

我不认为你可以那么具体,但你可以做的是声明某些东西返回两种不同的类型,如下所示:

from typing import Union

class Bar:
    pass
class Baz:
    pass

def foo(garply : str) -> Union[Bar, Baz]:
    pass

看看这里的文档: https://www.python.org/dev/peps/pep-0484/#union-types

这里有一个合理的简短概述: http://blog.jetbrains.com/pycharm/2015/11/python-3-5-type-hinting-in-pycharm-5/

您最好考虑如何避免这种有问题的设计,而不是如何使用类型提示完美记录它。

关于python - PEP 484 的动态返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33907714/

相关文章:

python - Jinja2 模板渲染 {{variable}} 代替空字符串(如果未设置变量)

python - DRF json 404 而不是 html 页面

python - 排除 Python 键入注释中的类型

python - 如何使用 setuptools 生成调用 `python -m mypackage` 的 console_scripts 入口点?

Python 语法糖 : function arg aliases

python - theano 安装期间的 `No module named nose_parameterized`

python - PEP 484 : exclusive type for type hint

php - 验证变量是否为有效 GD 图像资源的方法?

python - 是否可以使用带有列缩进的 PEP8

python - PyNotify 不能从 cron 工作?