【问题标题】:Type hint that excludes a certain type排除某种类型的类型提示
【发布时间】:2020-02-26 06:02:01
【问题描述】:

在 Python 中,是否可以声明从匹配中排除某些类型的类型提示?例如,有没有办法声明“typing.Iterable except not str”之类的类型提示?

【问题讨论】:

    标签: python types


    【解决方案1】:

    python 类型提示不支持排除类型,但是你可以使用 Union 类型来指定你想要获取的类型。

    比如:

    def x(x: Iterable[Union[int, str, dict]]):
        pass
    
    x([1]) # correct
    x([1, ""]) # correct
    x([None]) # not correct
    

    如果您想获得除您可以做的事情之外的所有类型,那么一种使 Union[] 更短的方法:

    expected_types = Union[int, str, dict]
    
    
    def x(x: Iterable[expected_types]):
        pass
    

    这就像上面的代码一样工作。

    【讨论】:

    • 这就是我害怕的。问题是我想支持任何 Iterable (包含任何类型的对象),但 not str (可迭代)本身。对我想要支持的类型进行Union 可能会无限长。
    • @fluffy 如果你的函数是这样工作的,那么使用常量 EVERYTYPE_EXCEPT_STR 怎么样?
    • 我的意思是我已经定义了一个注释类型,其中包含我想要支持的最常见的可迭代类型(str 除外),但这非常笨拙。无论如何,我希望得到一个更笼统的答案,它不一定能处理我在问题中描述的确切情况。我试图问一些更通用的问题,我不打算让回答挂在我的具体要求上。
    猜你喜欢
    • 2020-01-17
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    • 1970-01-01
    • 2016-05-23
    相关资源
    最近更新 更多