Python type hints with imported class methods(使用导入的类方法进行的Python类型提示)
本文介绍了使用导入的类方法进行的Python类型提示的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
this answer建议在class
级别使用import
命令来加载其定义可以移动到其他模块的方法。作为一个最小的例子,
class_def.py
:
class C:
from _methods import m
_methods.py
:
def m(self):
return "hello"
通常,大多数功能代码完成的IDE都会将某些类中定义的函数识别为绑定方法,self
将被自动识别为具有定义该方法的类的类型。遗憾的是,在上述情况下,我没有在类中定义m
。仅从_methods.py
无法判断self
应该具有C
类型。
在m
的定义中,如果插入以self.
开头的行,则我的IDE无法建议m
或我可能在C
中实现的任何其他方法。
显而易见的解决方案是添加类型提示:
from class_def import C
def m(self: C):
return "hello"
但现在我们有了循环导入:C
导入_methods
,但_methods
导入C
的定义。如何在不引入循环导入的情况下创建类型提示?
我当前使用的是Python3.7,但我也对需要更高版本的解决方案感兴趣。
推荐答案
通过使用
typing.TYPE_CHECKING
标志仅在类型检查期间导入C
修复循环导入。这将使
C
的值在运行时未定义。将其引起来("C"
)或导入__future__.annotations
:
_methods.py
变体1:
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from class_def import C
def m(self: "C"):
return "hello"
_methods.py
变体2:
from __future__ import annotations
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from class_def import C
def m(self: C):
return "hello"
这篇关于使用导入的类方法进行的Python类型提示的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:使用导入的类方法进行的Python类型提示


猜你喜欢
- 我如何透明地重定向一个Python导入? 2022-01-01
- 使用 Cython 将 Python 链接到共享库 2022-01-01
- 计算测试数量的Python单元测试 2022-01-01
- ";find_element_by_name(';name';)";和&QOOT;FIND_ELEMENT(BY NAME,';NAME';)";之间有什么区别? 2022-01-01
- 我如何卸载 PyTorch? 2022-01-01
- CTR 中的 AES 如何用于 Python 和 PyCrypto? 2022-01-01
- 检查具有纬度和经度的地理点是否在 shapefile 中 2022-01-01
- YouTube API v3 返回截断的观看记录 2022-01-01
- 如何使用PYSPARK从Spark获得批次行 2022-01-01
- 使用公司代理使Python3.x Slack(松弛客户端) 2022-01-01