Разрешение циклических зависимостей в Python
В Python можно столкнуться с циклическими зависимостями, когда модули полагаются друг на друга в своем определении. Один из таких сценариев возникает, когда два файла, node.py и path.py, определяют классы Node и Path соответственно, каждый из которых ссылается на другой.
Изначально path.py импортировал node.py для доступа к узлу. объект. Однако недавняя модификация представила в Node метод, который ссылается на объект Path. Это создало циклическую зависимость, что привело к исключению при импорте path.py.
Существует несколько подходов к разрешению циклических зависимостей:
1. Прямая ссылка:
Используйте прямую ссылку в одном модуле, чтобы объявить имя класса другого модуля без его импорта. В этом случае path.py объявит класс Node с прямой ссылкой:
from typing import ForwardRef Node = ForwardRef("Node") class Path: def method_needs_node(self, node: Node): ...
2. Отложенный импорт:
Импортируйте необходимый модуль только тогда, когда он необходим внутри функции. Это особенно удобно, когда зависимость требуется только для одной или нескольких функций:
# in node.py from path import Path class Node ... # in path.py class Path: def method_needs_node(): from node import Node n = Node() ...
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3