python - Python打字 - 返回值是参数的实例
问题描述
我有一个函数接收一个类并返回该类的一个实例。一个简单的例子:
def instantiate(class_: Type[enum.Enum], param: str) -> enum.Enum:
return class_(param)
返回值与参数的类型相同class_
,所以如果class_是MyEnum
,返回值将是类型MyEnum
。
有什么方法可以声明吗?
解决方案
肯定有!这应该非常适合您的用例。
from enum import Enum
from typing import TypeVar, Type
E = TypeVar('E', bound=Enum)
def instantiate(class_: Type[E], param: str) -> E:
return class_(param)
并且只需对其进行快速测试以确认类型提示是否按预期工作:
class MyEnum(Enum):
ONE = '1'
TWO = '2'
# I hover over 'e' and PyCharm is able to infer it's of type MyEnum.
e = instantiate(MyEnum, '1')
print(e)
# MyEnum.ONE
注意:如评论中所述,在 Python 3.9 中,不推荐使用一些类型结构,如Type
、List
和Dict
,因为您可以只使用内置类型。type[E]
因此,如果您有较新的 Python 版本,则可以定义上述注释。
推荐阅读
- javascript - 循环遍历 2 个数组
- google-cloud-platform - 无法从 GKE 访问具有私有 IP 的 GCP MySQL
- http-live-streaming - 生成 M3U8 HLS 播放列表时,是否应该包含尚不存在的媒体片段?
- javascript - 为什么事件侦听器中的“this”是窗口而不是元素?
- c++ - clang 格式可以格式化 C/C++ 函数以在逗号之前破坏参数列表吗?
- node.js - node.js/express.js 应用程序中相同组件的问题
- java - Java中的compare()和compareUnsigned()有什么区别
- qt - 如何获取组合框的选定项目并将其保存为 intiger
- objective-c - 当使用 gcc 运行objective-c | AppleEvents.h 错误
- android - 带有描述和预览图像的自定义 TitleView Android TV (FireTV)