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

参考文章

相关推荐
疯狂吧小飞牛3 分钟前
Lua C API 中的 lua_rawseti 与 lua_rawgeti 介绍
c语言·开发语言·lua
Tony Bai6 分钟前
【Go 网络编程全解】06 UDP 数据报编程:速度、不可靠与应用层弥补
开发语言·网络·后端·golang·udp
半夏知半秋6 分钟前
lua对象池管理工具剖析
服务器·开发语言·后端·学习·lua
大飞记Python17 分钟前
Windows10停服!7-Zip被爆组合漏洞|附安全指南
开发语言
小叮当⇔32 分钟前
PYcharm——获取天气
ide·python·pycharm
浪裡遊32 分钟前
MUI组件库与主题系统全面指南
开发语言·前端·javascript·vue.js·react.js·前端框架·node.js
一匹电信狗1 小时前
【C++】C++风格的类型转换
服务器·开发语言·c++·leetcode·小程序·stl·visual studio
霍志杰1 小时前
记一次csv和xlsx之间的转换处理
python
寻找华年的锦瑟1 小时前
Qt-键鼠事件
开发语言·qt
whm27771 小时前
Visual Basic 值传递与地址传递
java·开发语言·数据结构