假设我有一个函数将根据字符串输入参数返回一个类,如下所示:
def foo(bar):
if bar == 'baz':
return Baz()
else:
return Buz()
在这种情况下,Baz
和Buz
都是 的子类Biz
,但每个都有许多不同的函数,因此将返回类型声明为超类并不是特别有用。假设我不在乎我的.pyi
文件是否可怕,有没有办法让我声明给定输入返回的子类?
假设我有一个函数将根据字符串输入参数返回一个类,如下所示:
def foo(bar):
if bar == 'baz':
return Baz()
else:
return Buz()
在这种情况下,Baz
和Buz
都是 的子类Biz
,但每个都有许多不同的函数,因此将返回类型声明为超类并不是特别有用。假设我不在乎我的.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/
您最好考虑如何避免这种有问题的设计,而不是如何使用类型提示完美地记录它。