Электронная библиотека. Читать онлайн и скачивать книги бесплатно
Добро пожаловать в el-kniga.ru — ваш уголок в мире литературы! Наша электронная библиотека создана для тех, кто ценит удобство и доступность. Здесь вы найдете тысячи книг различных жанров, которые можно читать онлайн или скачать на свое устройство совершенно бесплатно. Мы верим, что знания и увлекательные истории должны быть доступны каждому, и работаем для того, чтобы вы могли наслаждаться чтением без ограничений.
Модульное программирование: как правильно импортировать модули
Содержимое статьи:
Проблема с импортом между модулями
Разбиение программы на модули может привести к проблемам при импорте классов из разных файлов. Рассмотрим пример с классами Canvas и MainWindow.
Когда вам нужно использовать класс Canvas в MainWindow, импорт модуля из файла Canvas не вызывает проблем. Однако попытка импортировать файл MainWindow из файла Canvas приведет к ошибке о циклическом импорте.
Решения
1. Использование глобальной переменной
Одна из возможных стратегий - использование глобальной переменной для хранения объекта MainWindow. В файле Canvas можно создать глобальную переменную _mainWindow и присвоить ей значение MainWindow при ее создании в файле MainWindow:
# В файле MainWindow:
_mainWindow = MainWindow()
# В файле Canvas:
from MainWindow import _mainWindow
2. Использование фабричного метода
Фабричный метод - это метод, который создает и возвращает объект определенного класса. В файле Canvas можно создать фабричный метод, который возвращает объект MainWindow:
# В файле Canvas:
def get_main_window():
from MainWindow import MainWindow
return MainWindow()
# В файле MainWindow:
canvas = Canvas()
main_window = canvas.get_main_window()
3. Использование модуля ссылок
Модуль ссылок позволяет определять зависимости между модулями во время выполнения. В файле Canvas можно использовать функцию weakref.proxy() для создания прокси-объекта для MainWindow:
# В файле Canvas:
import weakref
from MainWindow import MainWindow
_mainWindow_proxy = weakref.proxy(MainWindow())
# В файле MainWindow:
canvas = Canvas()
main_window = canvas._mainWindow_proxy
Бетономешалки и установки для дорожных работ
CamZamZam - онлайн фото с веб камерой и эффектом лужи
Чат рулетка 2026: Случайные собеседники
Чат рулетка 2026: улучшения и обновления
Чат-рулетка с незнакомцем: случайный контакт
Дизайн ванной комнаты
Генератор этикеток для бизнеса
ИП или ООО: какая форма для начинающего бизнеса?
Калькулятор дохода от SEO-продвижения
Кассовые терминалы с камерой
Курс btc на сегодня
Личные разговоры в случайном порядке
Минималистичные сумки
Онлайн чат 18+ видео
Онлайн-коммуникатор
Топ-методы монетизации групп
Узбекские фильмы для детей
Видеочат для разговорной речи
Видеочат с неизвестным
Видеосвязь с любым местом
Знакомства в интернете для общения