python - Python:输入一个接收类型并返回该类型实例的泛型函数
问题描述
我想向一个 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 输出。
推荐阅读
- ionic3 - 无法集成 Opentok 音频视频控件
- entity-framework - 使用包管理器控制台将实体框架连接到 Key Vault
- python - Yagmail脚本不发送多个附件
- scikit-learn - 我有一个包含一个目标列和两个文本列的数据集。这是一个我试图通过深度学习解决的 nlp 问题
- javascript - 隐藏一个元素及其空间并通知应用程序,以便它使用 React 显示其他内容
- vb.net - 如何在 VB.net 中使用 .zpl 代码打印 .txt?
- php - 执行名称未知的文件
- android - 如何在生成的源中抑制 Lint 警告?
- r - 如何创建包含日期和 NA 的数据框
- css - Shopify 主题开发 - 如何在 CSS 或内联样式中使用 section.block.variable?