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

参考文章

相关推荐
胡萝卜的兔15 分钟前
go 日志的分装和使用 Zap + lumberjack
开发语言·后端·golang
浪扼飞舟18 分钟前
c#基础(一)
开发语言·c#
折翼的恶魔37 分钟前
数据分析:合并
python·数据分析·pandas
百锦再1 小时前
在 CentOS 系统上实现定时执行 Python 邮件发送任务
java·linux·开发语言·人工智能·python·centos·pygame
I'm a winner1 小时前
第五章:Python 数据结构:列表、元组与字典(二)
数据结构·python
番薯大佬1 小时前
Python学习-day8 元组tuple
java·python·学习
何似在人间5751 小时前
Go语言快速入门教程(JAVA转go)——1 概述
java·开发语言·golang
边疆.2 小时前
【C++】继承详解
开发语言·c++·继承
小文数模2 小时前
2025高教社国赛数学建模C题参考论文(含模型和代码)
python·数学建模·matlab
lxh01132 小时前
LRU 缓存
开发语言·前端·javascript