我有一个外部函数,它像工厂一样工作,并返回具有公共父类型的不同类的实例: 例如
class Printer:
def make(self, blueprint:str) -> Blueprint: ...
class PrintA(Blueprint):
def a_specific(self) -> int: ...
class PrintB(Blueprint): ...
def b_specific(self, args):
"""docstring"""
a : PrintA = Printer().make("A")
b : PrintB = Printer().make("B")
# TypeHint: "(variable) a: Blueprint"
# TypeHint: "(variable) b: Blueprint"
# Usage:
result = a.a_specific() # function & type of result not detected : Any
b.b_specific(arg) # function not detected, parameters and description unknown : Any
问题在于
a
和 b
将 Blueprint
作为给定的类型提示。
如何强制变量使用正确的类型提示,以便我的 IDE 可以检测到子函数?
我尝试使用
# type: ignore[override]
,但这似乎不适用于此目的,因为它没有错误;是否有另一个神奇的注释命令表明类型检查器应该信任人工注释?
注意:我无法调整打印机或蓝图本身。修改匹配的
*.pyi
文件是可能的,但应该最少。
蓝图量很大。
不确定是否相关,但使用 VS-Code 和 Python 扩展进行类型提示。
帮助静态类型检查器的一种可能方法是使用
typing.cast
: 进行类型转换
from typing import cast
a = cast(PrintA, Printer().make("A"))
b = cast(PrintB, Printer().make("B"))
IDE 和静态类型检查器现在应该可以正确识别
a
和 b
。
与断言不同,没有运行时检查来确保转换准确,所以要小心。