Python:输入一个接收类型并返回该类型实例的通用函数

标签 python generics type-hinting

我想将类型添加到一个 Python 函数,该函数接受一个类型作为参数(实际上是特定类的子类型),并返回该类型的一个实例。考虑一个将特定类型作为参数的工厂,例如:

T = TypeVar('T', bound=Animal)

def make_animal(animal_type: Type[T]) -> T:  # <-- what should `Type[T]` be?
    return animal_type()

(显然这是一个非常简单的例子,但它演示了这种情况)

这感觉应该是可行的,但我找不到如何正确地键入提示。

最佳答案

不确定您的问题是什么,您发布的代码是完全有效的 Python 代码。有 typing.Type这正是你想要的:

from typing import Type, TypeVar

class Animal: ...
class Snake(Animal): ...

T = TypeVar('T', bound=Animal)

def make_animal(animal_type: Type[T]) -> T:
    return animal_type()

reveal_type(make_animal(Animal))  # Revealed type is 'main.Animal*'
reveal_type(make_animal(Snake))   # Revealed type is 'main.Snake*'

查看 mypy-play 上的 mypy 输出.

关于Python:输入一个接收类型并返回该类型实例的通用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67685439/

相关文章:

java - 为什么不能将 ArrayList 分配给 List 变量?

python - Flask 路由装饰器类型提示

python - 如何在包级别禁用 mypy 错误代码?

python - 使用常规方法和类方法实现 Python 协议(protocol)

python - Pandas 函数 : DataFrame. apply() 运行顶行两次

python - 有没有办法计算 Spark df 中每行的非空值?

java - 如何修复此使用泛型的代码中的 "method not applicable to arguments"问题

java - 无法理解如何创建链表数组

python - Python源格式化器/ pretty-print

Python:3d矩阵元素类型转换速度