首页 > 解决方案 > Python打字 - 返回值是参数的实例

问题描述

我有一个函数接收一个类并返回该类的一个实例。一个简单的例子:

def instantiate(class_: Type[enum.Enum], param: str) -> enum.Enum:
    return class_(param)

返回值与参数的类型相同class_,所以如果class_是MyEnum,返回值将是类型MyEnum

有什么方法可以声明吗?

标签: pythonpython-3.xtype-hintingpython-typing

解决方案


肯定有!这应该非常适合您的用例。

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 中,不推荐使用一些类型结构,如TypeListDict,因为您可以只使用内置类型。type[E]因此,如果您有较新的 Python 版本,则可以定义上述注释。


推荐阅读