【问题标题】:How do I specify that the return type will be the same as the input type?如何指定返回类型与输入类型相同?
【发布时间】:2022-01-03 00:28:15
【问题描述】:

我在下面有一个函数,target 可以是任何类型。我想键入此函数,以便输出 T 与作为 target 传入的任何类型相同。

from typing import Type, TypeVar

T = TypeVar("T")

def lowercase_if_possible(target: Type[T]) -> T:
    if isinstance(target, str):
        return target.lower()
    return target

我认为这与泛型有关,但我无法弄清楚语法,因为 Python 文档仅显示用于类的泛型,而不是单个函数。

【问题讨论】:

    标签: python type-hinting typing


    【解决方案1】:

    Type[T] 表示target 的值是一个类(或子类)本身,而不是类型的值。例如,

    def instantiate(c: Type[T]) -> T:
        return c()
    
    instantiate(int)  # Returns 0, a value of type int
    instantiate(str)  # Returns "", a value of type str
    

    T 就是您所需要的。给定T 类型的值,无论该类型是什么,您都将返回T 类型的值。

    def lowercase_if_possible(target: T) -> T:
        if isinstance(target, str):
            return target.lower()
        return target
    

    (请注意,如果没有运行时检查来确定 T 实际上是什么,只有认为您可以做的就是返回给定的值,因为您对实际的值知之甚少用它做任何事。)

    泛型用于定义一个包装任意但明确的类型的类。

    【讨论】:

      【解决方案2】:

      您已经接近正确的解决方案,只需使用 T 作为 target 的类型,它应该可以解决问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-23
        • 1970-01-01
        • 2013-10-13
        • 2019-05-29
        • 1970-01-01
        • 2018-12-24
        • 2021-09-30
        • 2019-12-14
        相关资源
        最近更新 更多