我有一个下面的函数,其中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 文档仅显示类上使用的泛型,而不是单个函数。
最佳答案
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
实际上是什么,唯一认为您能做的就是返回给定值,因为您知道的不够多关于实际使用它做任何事情的值(value)。)
泛型用于定义一个类,包装任意但明确的类型。
关于python - 如何指定返回类型与输入类型相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70099076/