使用导入的类方法进行的Python类型提示

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,但我也对需要更高版本的解决方案感兴趣。

推荐答案

  1. 通过使用typing.TYPE_CHECKING标志仅在类型检查期间导入C修复循环导入。

  2. 这将使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类型提示的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Leetcode 234: Palindrome LinkedList(Leetcode 234:回文链接列表)
How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
subprocess.Popen tries to write to nonexistent pipe(子进程。打开尝试写入不存在的管道)
I want to realize Popen-code from Windows to Linux:(我想实现从Windows到Linux的POpen-code:)
Reading stdout from a subprocess in real time(实时读取子进程中的标准输出)
How to call type safely on a random file in Python?(如何在Python中安全地调用随机文件上的类型?)