具有 PE​​P 484 的动态 return 类型

Dynamic return types with PEP 484

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

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

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

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

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/

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