Форум сайта python.su
0
file_1.py
import file_2 class My_class_1: def __init__(self): # тру-ля-ля def fn_1(self): file_2.fn_1(self) class My_class_2: pass
def fn_1(self): obj = My_class_2()
import file_1 def fn_1(self): obj = file_1.My_class_2()
name My_class_2 is not defined
Офлайн
221
в первом случае fn_1 ничег оне знает от My_class_2 так как он определен в другом модуле
Во втором случае вообще похоже на циклический импорт.
Проблема именно в организации кода. В зависимости от того тчо вы хотите могут быть разные пути решения
Офлайн
294
Voroshek Наличие циклического импорта это явные проблемы с архитектурой. Поддержу JOHN_16 В зависимости от того что вы хотите существуют разные пути решения.
Но если ваш интерес сугубо академический то во первых: читате Марка Лутца “Изучаем Python” Часть 5. Модули - Упражнение 7. Циклический импорт. там все разжовано, наколько важен порядок импорта, и как оно происходит все.
во вторых: вас может спасти конструкция вида if __name__ == ‘__main__’:
вот так оно работает(хотя повторюсь, так делать не следует, пересмотрите вашу архитектру):
# file_1.py import file_2 class My_class_1: def __init__(self): pass def fn_1(self): print('My_class_1 fn1') file_2.fn_1(self) class My_class_2: def __init__(self): print('My_class_2') if __name__ == '__main__': mc = My_class_1() mc.fn_1()
#file_2.py import file_1 def fn_1(self): print('file2 fn1') obj = file_1.My_class_2()
>>> My_class_1 fn1 file2 fn1 My_class_2 >>>
[code python][/code]
Отредактировано PEHDOM (Дек. 20, 2018 10:46:30)
Офлайн
0
О, я-я! Погуглил про циклический импорт - то, что нужно, спасибо!
Лутца читал по 4-ому изданию.
Отредактировано Voroshek (Дек. 20, 2018 11:53:07)
Офлайн