使用 PEP 484 的动态返回类型 [英] Dynamic return types with PEP 484

查看:28
本文介绍了使用 PEP 484 的动态返回类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Say I have a function that will return a class based on a string input parameter, like so:

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

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

In this case, both Baz and Buz are subclasses of Biz, but each has a number of distinct functions, so declaring the return type as the superclass is not particularly useful. Assuming I don't care if my .pyi file is hideous, is there any way for me to declare what subclass is returned for a given input?

推荐答案

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

I don't think you can quite that specifically, what you can do though is declare that something returns two different types like so:

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/

And a reasonable short overview here: http://blog.jetbrains.com/pycharm/2015/11/python-3-5-type-hinting-in-pycharm-5/

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

You might be better off thinking how to avoid this questionable design rather than how to perfectly document it with type hints.

这篇关于使用 PEP 484 的动态返回类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆