Python typing:如何声明函数返回值为传入类参数的实例类型
解法
你可以通过绑定边界的泛型实现精准的类型对应,步骤如下:
- 先定义绑定了
enum.Enum边界的TypeVar,再将入参class_声明为该泛型的类类型,返回值直接标注为该泛型即可:
import enum from typing import Type, TypeVar # 定义泛型T,边界为enum.Enum,代表所有Enum的子类 T = TypeVar('T', bound=enum.Enum) def instantiate(class_: Type[T], param: str) -> T: return class_(param)
- 效果验证
假设你有自定义枚举类:
class MyEnum(enum.Enum): OPT_A = "a" OPT_B = "b"
调用instantiate(MyEnum, "a")时,类型检查器会自动识别返回值类型为MyEnum,而非宽泛的enum.Enum,完全符合需求。
补充说明:如果你使用Python 3.10及以上版本,可以直接用内置的
type[T]替换typing.Type[T],无需额外导入Type。
内容的提问来源于stack exchange,提问作者user972014
相关产品推荐
相关产品推荐

