ZANIN блог
Контакты
Крути вниз
Фильтр по:
//Post title

Python Singleton и пример динамического заполнения списка словарей

28 Фев 2021Категория : Python

Python Singleton и пример динамического заполнения списка словарей

Паттерн Singleton считается не сложным, но не всегда понятно, как его использовать впервые. Для чего нужно существование только одного объекта определённого класса.

В примере покажу, для чего можно применить этот паттерн. Возможно и не самая хорошая реализация, но зато будет понятно, что с этим можно делать дальше.

Суть моего примера в том, что есть стандартная база данных Wordpress с вариативными товарами Woocommerce. Допустим вы хотите перенести все эти товары в новую базу данных, которая имеет другую структуру и другие таблицы и уже под новую структуру писать сайт или админку, например на Flask.

 

Пример структуры программы:

Python Singleton

Создаем файл DataBase.py, он нужен для установки соединения с базой данных. В нем можно создать несколько методов, каждый из которых будет отвечать за соединение с определенной базой данных. У меня в качестве примера создан один метод, который устанавливает соединение с базой Wordpress. Но вы для себя можете создать свою базу и перенести сформированные данные в нее.

Python Singleton

Создадим файл Wordpress.py, который будет вытягивать данные из таблиц Wordpress и приводить к нужному виду. Методы, которые начинаются на get, в них я получаю данные из таблиц. Методы, которые у меня называются на set, преобразуют данные, чтобы потом удобнее с ними было работать. Например, сгруппировать каждую строку полученную из таблицы wp_posts по ID товара. Также сгруппировать данные из wp_postmeta по ID записи.

Python Singleton

Python Singleton

Python Singleton

Python Singleton

Далее, я создаю файл bootstrap.py, который получает сформированные массивы данных и дальше мы можем наследоваться от него, чтобы получать доступ к этим массивам (что-то типа глобальных переменных, хотя я их и не делал глобальными, но вы можете сделать и так).

Python Singleton

Далее создаем файл products.py, который формирует тело продукта для последующей записи в новую таблицу.

Python Singleton

В папке helpers я создал файл DynamicDict.py, в котором находится небольшой класс. Этот класс помогает избежать ошибки KeyError при записи в словарь.

Python Singleton

В классе Product есть список и словарь, которые заполняются циклом и выдают результат.

Python Singleton

Получается, что от класса Bootstrap мы получаем массивы и далее проходимся по массиву self.products, а затем при проходе используем ID каждого товара (это в данном случае key) и формируем новое тело для товара, которое будет сгруппировано также по его ID.

Python Singleton

То есть в самом методе get ID товара попадает в каждый из методов self.set_id, self.set_name и так далее. Каждый из этих методов записывает данные в словарь self._inn, который будет сгруппирован по ID товара. А потом после каждой итерации мы запишем словарь в массив self._data.

Все эти set_ методы ничего не возвращают, они лишь записывают данные в словарь, который инициализирован в конструкторе класса.

Python Singleton

Каждый из этих методов обращается к методу get с таким же именем, как у set. Все get методы я обозначил как статичные.

Python Singleton

Python Singleton

Python Singleton

Далее в файле main.py можете вывести результат и замерить скорость. После этого уже можно работать с полученным массивом и писать его в другую таблицу. В моем примере я вывел данные об одном товаре по его ID.

Python Singleton

  • 687

01. Об авторе

Александр Занин

Занимаюсь разработкой на Django,
а также бэкенд разработкой на PHP (Laravel, Slim).

Find on :

02. Свежие статьи

Готовы заказать проект?

© ZANIN 2019 / All rights reserved.
Контакты
Close