PEP 484的动态返回类型

时间:2015-11-25 02:50:17

标签: python type-hinting pep

假设我有一个函数将返回一个基于字符串输入参数的类,如下所示:

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

在这种情况下,BazBuz都是Biz的子类,但每个都有许多不同的函数,因此将返回类型声明为超类并不是特别有用。假设我不关心我的.pyi文件是否可怕,是否有任何方法可以声明为给定输入返回什么子类?

1 个答案:

答案 0 :(得分:2)

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

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/

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