无需循环导入的 Python 类型提示
问题:
导入具有循环依赖的模块引入类型提示与 mixin 类结合使用时的运行时异常。
详细信息:
在 Python 3.4 中,一个类被分成两个文件(main.py 和 mymixin) .py),其中 mymixin.py 包含一个 mixin 类,该类继承自 main.py 中的主类(即类 Main(object, MyMixin):)。 MyMixin 方法中的类型提示需要将返回类型指定为 'Main',从而导致循环导入问题。
Python 3.4 解决方案:
绕过循环导入 while类型提示,采用使用前向声明的自定义方法。通过使用“typing”模块中的“TYPE_CHECKING”常量,类型注释块中的导入语句在运行时将被忽略。 'Main' 类型注释也会转换为字符串来转发声明。
Python 3.7 解决方案 (PEP 563):
使用 'from future import 注解的导入语句,所有类型注解都会变成字符串,并在运行时评估期间被跳过,从而使前向声明语法更清晰。
尽管有这些解决方法,使用具有类型提示的 mixins 可能仍然需要重构以确保PyCharm 和 mypy 类型检查都按预期工作。 Mypy 建议创建一个 ABC,主类和 mixin 类都继承自该 ABC。
以上是如何解决 Python 中 Mixin 类的类型提示的循环导入问题?的详细内容。更多信息请关注PHP中文网其他相关文章!