Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有PEP 484的动态返回类型_Python_Type Hinting_Pep - Fatal编程技术网

Python 具有PEP 484的动态返回类型

Python 具有PEP 484的动态返回类型,python,type-hinting,pep,Python,Type Hinting,Pep,假设我有一个函数,它将根据字符串输入参数返回一个类,如下所示: 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
请看以下文档:

这里有一个合理的简短概述:


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

每个变量在Python中都是动态类型化的,所以如果您确实需要知道变量的类型,请使用
type(…)
。比如,
type(“example string”)==str
将是
True
。我明白,我在这里的目的是为这个方法及其返回的类提供IDE支持。我感谢你的帮助!这可能是一种可能性。这种设计是在运行时自动生成类的结果,因此没有什么可避免的。我想,如果您在运行时生成东西(或者如果不是,甚至!),那么将输入与特定类型的输出明确耦合的明显方法是使用单独的函数。听起来好像你想让类型提示来描述语义,但它们可能无法很好地实现这一点。