两个模块,我们需要做类型标注,于是出现了循环引用的问题
# 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