Круговая зависимость в Python

У меня есть два файла: node.py и path.py, которые определяют два класса: Node и Path соответственно.

До сегодняшнего дня определение Path ссылалось на объект Node, и поэтому я сделал

from node.py import *

в файле path.py.

Однако на сегодняшний день я создал новый метод для Node, который ссылается на объект Path.

У меня возникли проблемы при попытке импортировать path.py: я попробовал это, и когда программа запустилась и вызвала метод Path, который использует Node, исключение выросло примерно на Node, которое не определено.

Что мне делать?

Ответ 1

Импорт модулей Python - отличная статья, которая объясняет круговой импорт в Python.

Самый простой способ исправить это - переместить импорт пути в конец модуля 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()
    ...