如何为依赖类factory属性的make方法添加返回值类型注解?
解决方案
要让make方法的返回值类型与factory属性的类型绑定,需要借助Python的泛型类型系统来实现,具体步骤如下:
首先导入泛型相关的类型工具:
from typing import TypeVar, Type, Generic定义一个类型变量,用于关联类的
factory类型和make方法的返回值类型:T = TypeVar('T')修改
Foo类,让它继承Generic[T],并将factory的类型注解改为Type[T],同时把make方法的返回类型注解设为T:class Foo(Generic[T]): factory: Type[T] = A def make(self) -> T: return self.factory()子类
Bar继承Foo时,指定具体的类型参数B,这样factory的类型会被推断为Type[B],make方法的返回值类型也会对应为B:class Bar(Foo[B]): factory: Type[B] = B
完整代码示例:
from typing import TypeVar, Type, Generic class A: pass class B: pass T = TypeVar('T') class Foo(Generic[T]): factory: Type[T] = A def make(self) -> T: return self.factory() class Bar(Foo[B]): factory: Type[B] = B
这样类型检查工具(比如mypy)就能正确识别Foo().make()返回A类型,Bar().make()返回B类型。
内容的提问来源于stack exchange,提问作者Chris Withers
相关产品推荐
相关产品推荐

