Python:类型标注解决循环引用问题most likely due to a circular import

两个模块,我们需要做类型标注,于是出现了循环引用的问题

python 复制代码
# models.py
from controllers import BookController


class Book:
    def get_controller(self) -> BookController:
        return BookController(self)
python 复制代码
# controllers.py
from models import Book


class BookController:
    def __init__(self, book: Book) -> None:
        self.book = book

这两个文件相互引用了,实际上我们仅用于类型标注

复制代码
most likely due to a circular import

解决办法

使用 TYPE_CHECKING

python 复制代码
# controllers.py
from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from models import Book


class BookController:
    def __init__(self, book: "Book") -> None:
        self.book = book

或者使用 annotations + TYPE_CHECKING

python 复制代码
# controllers.py
from __future__ import annotations

from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from models import Book


class BookController:
    def __init__(self, book: Book) -> None:
        self.book = book

参考文章

相关推荐
2401_8318249612 分钟前
使用Fabric自动化你的部署流程
jvm·数据库·python
Sunshine for you18 分钟前
C++中的职责链模式实战
开发语言·c++·算法
njidf31 分钟前
Python日志记录(Logging)最佳实践
jvm·数据库·python
@我漫长的孤独流浪31 分钟前
Python编程核心知识点速览
开发语言·数据库·python
宇擎智脑科技33 分钟前
A2A Python SDK 源码架构解读:一个请求是如何被处理的
人工智能·python·架构·a2a
2401_8512729934 分钟前
实战:用Python分析某电商销售数据
jvm·数据库·python
vx_biyesheji000136 分钟前
Python 全国城市租房洞察系统 Django框架 Requests爬虫 可视化 房子 房源 大数据 大模型 计算机毕业设计源码(建议收藏)✅
爬虫·python·机器学习·django·flask·课程设计·旅游
qq_4160187239 分钟前
C++中的状态模式
开发语言·c++·算法
2401_8845632439 分钟前
模板代码生成工具
开发语言·c++·算法
code 小楊1 小时前
yrb 1.5.0 正式发布:Python 极简国内下载加速与全景可视化终端体验!
开发语言·python