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

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

# models.py
from controllers import BookControllerclass Book:def get_controller(self) -> BookController:return BookController(self)
# controllers.py
from models import Bookclass BookController:def __init__(self, book: Book) -> None:self.book = book

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

most likely due to a circular import

解决办法

使用 TYPE_CHECKING

# controllers.py
from typing import TYPE_CHECKINGif TYPE_CHECKING:from models import Bookclass BookController:def __init__(self, book: "Book") -> None:self.book = book

或者使用 annotations + TYPE_CHECKING

# controllers.py
from __future__ import annotationsfrom typing import TYPE_CHECKINGif TYPE_CHECKING:from models import Bookclass BookController:def __init__(self, book: Book) -> None:self.book = book

参考文章

  • Python Type Hints - How to Fix Circular Imports

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/602917.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于多目标粒子群算法的支配解求解,基于多目标粒子群的帕累托前沿求解,基于mopso的多目标求解,基于mopso+bp的多目标求解资源

目录 摘要 测试函数shubert 粒子群算法的原理 粒子群算法的主要参数 粒子群算法原理 基于多目标粒子群算法的支配解求解,基于多目标粒子群的帕累托前沿求解,基于mopso的多目标求解,基于mopso+bp的多目标求解资源 代码 结果分析 展望 代码下载:基于多目标粒子群算法的支配解…

Github 2024-01-07 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-01-07统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目4Jupyter Notebook项目2Go项目2C#项目1Starlark项目1非开发语言项目1Java项目1 跨平台应用程序UI框…

qt信号和槽

Qt是一个跨平台的C图形用户界面应用框架 91年奇趣科技开发 pro工程文件介绍 .pro就是工程文件(project),它是qmake自动生成的用于生产makefile的配置文件 QT core gui //Qt包含的模块greaterThan(QT_MAJOR_VERSION, 4): QT widgets //大于4版本包含…

openssl ans1定义的实体

由于openssl中的ASN1的结构是通过宏来定义的,导致我们经常找不到他的结构在哪里,通过阅读rfc,并且对照OPENSSL,发现OPENSSL中的结构基本是按照相关rfc中的名称,在openssl中进行搜索,就能找到具体的定义了。…

在线制作假期承诺书,电子手写签名确认,一键导出打印。

假期将至,为积极落实安全管理规定,单位通常需要下发安全承诺书进行签字确认。 易查分可以实现网上下发安全承诺书通知,让查询者进行签名确认,还可以生成PDF,方便打印一人一张的纸质版承诺书,本次就来介绍如…

docker-compose安装及常用指令学习和harbor安装使用

文章目录 1 docker-compose1.1 docker-compose安装1.2 docker-compose卸载1.3 docker-compose常用命令 2 harbor安装使用2.1 harbor安装2.2 harbor使用 1 docker-compose ​ 在实际生产环境中,一个应用往往由许多服务构成,而 docker 的最佳实践是一个容…

java碳排放数据信息管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web碳排放数据信息管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环 境为TOMCAT7.0,Myeclipse8.5开发,数据库为…

1.7 OVERARCHING GOALS

我们的主要目标是教读者如何对大规模并行处理器进行编程以实现高性能,我们的方法不需要大量的硬件专业知识。因此,我们将用许多页面来开发高性能并行程序的技术。而且,我们相信,一旦你发展正确的洞察力并以正确的方式进行&#xf…

阿里云ECS云服务器客户端下载

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

计算机网络-VLAN原理与配置

之前我们学习了以太网的基础知识,了解了网络交换设备的发展,交换机的工作原理,广播域和冲突域。 一、概述 还简单了解了以太网的CSMA/CD通讯机制,以太网是建立在CSMA/CD (Carrier Sense Multiple Access/Collision Detection&…

2024 电子科技大学 《820 计算机专业基础》真题及解析(更新中...)

数据结构算法题(15 分,8 7) 1. 比较一棵二叉树的终端节点到根节点的路径长度,路径长度为关键字之和,输出路径长度最短的终端节点。 输入:第一行输入一个整数 n, 表示结点的个数,第二行输入二叉…

Rustdesk打开Win10 下客户端下面服务不会自启,显示服务未运行

环境: Rustdesk1.19 问题描述: Rustdesk打开Win10 下客户端下面服务不会自启,显示服务未运行 解决方案: 1.查看源代码 pub async fn start_all() {crate::hbbs_http::sync::start();let mut nat_tested = false;check_zombie()

go work

vscode gopls插件工具依赖go work,否则会报错 https://github.com/golang/tools/blob/master/gopls/doc/workspace.md Go 1.18 新特性多模块工作区教程-让多模块开发变得简单 - Go语言中文网 - Golang中文社区

A2DP Source如何从android系统拿到音频数据

Android 13 简单来说就是两条本地socket通道,分别使用文件: #define A2DP_CTRL_PATH "/data/misc/bluedroid/.a2dp_ctrl" #define A2DP_DATA_PATH "/data/misc/bluedroid/.a2dp_data" A2DP_CTRL_PATH是控制通道,A2DP…

物联网协议Coap中Californium CoapClient解析

目录 前言 一、CoapClient对象 1、类定义 2、Client方法调用 二、发送请求 1、构建请求 2、发起请求 3、接收响应 总结 前言 在之前的博客中物联网协议Coap之Californium CoapServer解析,文中简单介绍了CoapServer的实现。在物联网开发环境中,除了…

给Flutter + FireBase 增加 badge 徽章,App启动器 通知红点。

在此之前需要配置好 firebase 在flutter 在项目中。(已经配置好的可以忽略此提示) Firebase 配置教程:flutter firebase 云消息通知教程 (android-安卓、ios-苹果)_flutter firebase_messaging ios环境配置-CSDN博客 由于firebase 提供的消息…

在Gitee上维护Erpnext源

在Gitee上维护Erpnext源 官方的frappe和erpnext地址: GitHub - frappe/frappe: Low code web framework for real world applications, in Python and Javascript GitHub - frappe/erpnext: Free and Open Source Enterprise Resource Planning (ERP) 1, 仓库地址输入frappe的官…

HAL——SPI

学习目标 掌握SPI配置方式掌握SPI读写操作 学习内容 需求 SPI配置 打开SPI1,选中全双工模式。观察下方自动生成的引脚,是否和自己开发板引脚对应。 修改引脚,来动右侧芯片引脚视图,找到开发板对应引脚,进行修改。 观察修改后的…

SpringBoot-Redis

依赖 <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId>配置 # 服务器连接端口 spring.redis.port6379 # 服务器地址 spring.redis.host127.0.0.1 # 数据库索引&#xff08;默认为0&#xff09…

【GitHub】-design-pattern-extend(设计模式扩展)

写在前面 偶然间看到一篇文章 《Java 中保持扩展性的几种套路和实现》&#xff0c;写的不错&#xff0c;但是类图画的差了点儿意思。于是&#xff0c;自己动手画了画&#xff0c;对其中的内容作了一些调整&#xff0c;对包做了进一步划分&#xff0c;便于理解消化。以下是对Git…