2009-05-21 2 views
48

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

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

from node.py import * 

в файле path.py.

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

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

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

+2

duplicate? http://stackoverflow.com/questions/744373/python-cyclic-imports –

+2

Вы пытаетесь создать один класс для каждого файла? Вот почему это редко срабатывает. –

+3

Согласен с S.Lott. Python - это не Java. Вам не нужен один класс для каждого файла. –

ответ

84

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

Самый простой способ исправить это - переместить импорт пути в конец модуля узла.

+0

Хорошо, но дело в том, что у меня есть два других модуля 'tree.py' и' block.py' в этом пакете, которые требуют 'node.py' и требуются' path.py'. Так я должен положить их всех в один файл? Мне понравился один модуль в классе. –

+1

Вы попробовали мое предложение? Это, вероятно, сработает. Просто переместите импорт в конец файла. Я советую вам прочитать статью, чтобы понять, почему это происходит. –

+0

Вы правы, Надя. Сначала я неправильно понял ваше предложение. Это сработало. –

13

Другой подход заключается в импорте одного из двух модулей только в функции, где вам это нужно в другой. Конечно, это лучше всего работает, если вам нужно только в одном или небольшом числе функций:

# in node.py 
from path import Path 
class Node 
    ... 

# in path.py 
class Path 
    def method_needs_node(): 
    from node import Node 
    n = Node() 
    ... 

 Смежные вопросы

  • Нет связанных вопросов^_^