YardalGedal
@YardalGedal
yeah boy

Как правильно распределить методы класса в модули?

И так, есть проект. Грубо говоря, 4 py-файла. 2 файла статичных настроек, и 2 файла с классами внутри. Запускается один файл, в котором создаётся несколько экземпляров класса из второго файла, и первый далее с ними многопроцессорно работает: На основе каких-то присланных данных берёт какую-то функцию из второго класса и выполняет её с нужными аргументами.

Есть идея разделить второй класс (~220 кб) на модули из-за избыточности методов в нём и отсутствии логики внутри класса как таковой.

В классе содержатся методы, которые можно разделить на несколько типов
1.1 Методы класса, которые можно сделать статичными и вынести из класса без проблем.
1.2 Методы класса, использующие методы из пункта 1.1
1.3 Методы класса, использующие методы из пункта 1.1 или 1.2 + использующие аргументы класса.

Как я вижу решение:
Разделить класс на два модуля, commands и tools. В tools пойдут все методы из пункта 1.1 и другие побочные методы, а в commands именно функции, которые выполняет программа.

НО!
Что, в таком случае, делать с функциями использующими аргументы класса?
Как, кроме sys.path, можно связать каталоги commands и tools, ведь модули в tools не видны из commands?(решается помещением tools внутрь commands, либо созданием tools.py с набором функций, но оба варианта кажутся неверными - вдруг понадобится из первого класса вызывать, прописывать from commands.tools.db import db выглядит как-то стрёмно, как и from commands.tools import db)
  • Вопрос задан
  • 1633 просмотра
Решения вопроса 1
@red-barbarian
если ты разбил на три части функции, то почему делаешь два модуля? По логике нужно три модуля статик функции , класс 1.2 и класс 1.3.

Но не зная, что там происходит в классах, трудно разбить нормально на модули. Скорее нужно действовать так:
1. Представить какой интерфейс должен иметь изначальный 2 класс. Т.е. какие действия он должен выполнять во внешнем миру. Это будут так сказать паблик методы. остальные приват.
2. Представить структуру 2 класса на уровень меньше. Т.е. все методы разбиваются по темам (более менее независимые). Это будут классы следующего уровня абстракции. Класс 2 будет ответственен за создание этих классов и установки зависимостей между ними.
3. Далее повторяем пункты 1 и 2 для каждого подкласса. и т.д.

Но повторяю трудно говорить вообщем, не зная что там в изначальном классе.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы