Почему такой импорт не разрешен? - PullRequest
3 голосов
/ 25 мая 2009

ФАЙЛ: b.py

class B:
    def __init__(self):
        print "B"

import a

a = A()

ФАЙЛ: a.py

class A(B):             ###=> B  is not  defined
    def __init__(self):
        print "A"

Когда я пытаюсь выполнить b.py, говорят, что B не определен. Я неправильно понимаю "импорт"?

Большое спасибо, если вы можете указать на проблему.

Ответы [ 2 ]

5 голосов
/ 25 мая 2009

Самая близкая рабочая вещь к вашему коду будет:

==== FILE: b.py ====

class B:
    def __init__(self):
        print "B"

import a

if __name__ == "__main__":
    a = a.A()

==== FILE: a.py ====
import b

class A(b.B):             ###=> B  is not  defined
    def __init__(self):
        print "A"

Обратите внимание на различия:

  • Файлы (модули) являются пространствами имен, если вы импортируете «a», вы ссылаетесь на его класс A как «a.A».

  • Вам необходимо импортировать b в a.py, если вы хотите его использовать.

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

5 голосов
/ 25 мая 2009

Поскольку python инициализирует класс A в своем собственном файле. Это не похоже на C или PHP, где каждый импортированный модуль по существу вставляется в исходный файл.

Вы должны поместить класс B в тот же файл, что и класс A, чтобы решить эту проблему. Или вы можете поместить класс B в c.py и импортировать его с помощью "from c import B".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...