Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 19, 2018 23:14:32

Voroshek
От:
Зарегистрирован: 2011-03-11
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

Использовать класс в импортируемом модуле

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
file_2.py
 def fn_1(self):
  obj = My_class_2()
Пробовал делать так:
file_2
 import file_1
def fn_1(self):
  obj = file_1.My_class_2()
Возвращает:
 name My_class_2 is not defined



python3 openSUSE-43Leap

Офлайн

#2 Дек. 20, 2018 10:17:35

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Использовать класс в импортируемом модуле

в первом случае fn_1 ничег оне знает от My_class_2 так как он определен в другом модуле
Во втором случае вообще похоже на циклический импорт.
Проблема именно в организации кода. В зависимости от того тчо вы хотите могут быть разные пути решения



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Дек. 20, 2018 10:45:35

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Использовать класс в импортируемом модуле

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)

Офлайн

#4 Дек. 20, 2018 11:44:40

Voroshek
От:
Зарегистрирован: 2011-03-11
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

Использовать класс в импортируемом модуле

О, я-я! Погуглил про циклический импорт - то, что нужно, спасибо!
Лутца читал по 4-ому изданию.



python3 openSUSE-43Leap

Отредактировано Voroshek (Дек. 20, 2018 11:53:07)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version