Электронная библиотека. Читать онлайн и скачивать книги бесплатно

Добро пожаловать в el-kniga.ru — ваш уголок в мире литературы! Наша электронная библиотека создана для тех, кто ценит удобство и доступность. Здесь вы найдете тысячи книг различных жанров, которые можно читать онлайн или скачать на свое устройство совершенно бесплатно. Мы верим, что знания и увлекательные истории должны быть доступны каждому, и работаем для того, чтобы вы могли наслаждаться чтением без ограничений.

Дата публикации: 26.03.2025

Модульное программирование: как правильно импортировать модули


Содержимое статьи:

Проблема с импортом между модулями

Разбиение программы на модули может привести к проблемам при импорте классов из разных файлов. Рассмотрим пример с классами 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+ видео
Онлайн-коммуникатор
Топ-методы монетизации групп
Узбекские фильмы для детей
Видеочат для разговорной речи
Видеочат с неизвестным
Видеосвязь с любым местом
Знакомства в интернете для общения