如何指定 return 类型与输入类型相同?
How do I specify that the return type will be the same as the input type?
我在下面有一个函数,其中 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 文档仅显示在 类 上使用的泛型,而不是单个函数。
您接近正确的解决方案,只需使用 T
作为 target
的类型,它应该可以解决问题。
Type[T]
表示target
的值是一个class(或subclass)本身,而不是类型的值。例如,
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
类型的值,您将 return 一个 T
类型的值,无论该类型是什么。
def lowercase_if_possible(target: T) -> T:
if isinstance(target, str):
return target.lower()
return target
(请注意,如果没有运行时检查来确定 T
实际是什么, 只有 认为您可以做的是 return 给定值,因为你对价值的了解还不够多,无法用 它实际做任何事情。)
泛型用于定义 包装 任意但明确的类型的 class。
我在下面有一个函数,其中 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 文档仅显示在 类 上使用的泛型,而不是单个函数。
您接近正确的解决方案,只需使用 T
作为 target
的类型,它应该可以解决问题。
Type[T]
表示target
的值是一个class(或subclass)本身,而不是类型的值。例如,
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
类型的值,您将 return 一个 T
类型的值,无论该类型是什么。
def lowercase_if_possible(target: T) -> T:
if isinstance(target, str):
return target.lower()
return target
(请注意,如果没有运行时检查来确定 T
实际是什么, 只有 认为您可以做的是 return 给定值,因为你对价值的了解还不够多,无法用 它实际做任何事情。)
泛型用于定义 包装 任意但明确的类型的 class。