2009-05-25 3 views
3

FILE: b.pyПочему такой импорт не разрешен?

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

import a 

a = A() 

FILE: a.py

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

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

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

ответ

5

Ближайшая рабочая вещь, чтобы ваш код будет:

==== 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 как «aA».

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

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

5

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

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

+0

руда использовать полное имя для импорта класса: a = a.A() – reto

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