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

参考文章

相关推荐
测试者家园5 分钟前
基于DeepSeek和crewAI构建测试用例脚本生成器
人工智能·python·测试用例·智能体·智能化测试·crewai
liujing102329298 分钟前
Day04_刷题niuke20250703
java·开发语言·算法
大模型真好玩9 分钟前
准确率飙升!Graph RAG如何利用知识图谱提升RAG答案质量(四)——微软GraphRAG代码实战
人工智能·python·mcp
前端付豪17 分钟前
11、打造自己的 CLI 工具:从命令行到桌面效率神器
后端·python
前端付豪17 分钟前
12、用类写出更可控、更易扩展的爬虫框架🕷
后端·python
能工智人小辰24 分钟前
二刷 苍穹外卖day10(含bug修改)
java·开发语言
DKPT25 分钟前
Java设计模式之结构型模式(外观模式)介绍与说明
java·开发语言·笔记·学习·设计模式
江太翁27 分钟前
Pytorch torch
人工智能·pytorch·python
网安INF1 小时前
深度学习中的逻辑回归:从原理到Python实现
人工智能·python·深度学习·算法·逻辑回归
LL.。1 小时前
同步回调和异步回调
开发语言·前端·javascript