说我有这将返回基于一个字符串输入参数的一类,像这样一个功能:动态返回类型与PEP 484
def foo(bar):
if bar == 'baz':
return Baz()
else:
return Buz()
在这种情况下,无论是Baz
和Buz
是Biz
子类,但每个都有许多不同的函数,所以将返回类型声明为超类并不特别有用。假设我不在乎我的.pyi
文件是否可怕,是否有任何方法可以声明为给定输入返回了哪个子类?
说我有这将返回基于一个字符串输入参数的一类,像这样一个功能:动态返回类型与PEP 484
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/
你可能会更好思考如何避免这种有问题的设计,而不是如何完美用类型提示记录它。
我很感激帮助!这可能是一种可能性。这个设计是在运行时自动生成类的结果,所以没有太多的事情要做,以避免它。 –
我想如果你在运行时产生东西(或者如果没有,甚至是!),将输入清晰地耦合到特定类型的输出的明显方式是具有单独的功能。它几乎听起来像你想要的类型提示来描述语义,他们可能不会太好。 – pvg
每个变量都是在Python中动态输入的,所以如果你真的需要知道变量是什么类型的话,可以使用'type(...)'。就像'type(“example string”)== str'将会是'True'。 –
我明白,我的目的是为这个方法和它返回的类提供IDE支持。 –
https://github.com/ambv/typehinting和https://www.python.org/dev/peps/pep-0484/ –