Форум сайта python.su
Здравствуйте.
Заранее извиняюсь (может глупый вопрос). Пишу программу. Все в одном модуле. Создал 25 классов. Судя по среде в которой пишу, написал около 4000 строк. В питоне нет по этому поводу никаких ограничений или рекомендаций? Или желательно разбить на несколько компактных модулей? Поделитесь опытом пожалуйста.
Спасибо.
Офлайн
Питон как таковой в данном вопросе роли не играет!
Модульность это всегда хорошо! Потому что много проще потом вносить правки или дополнять приожение нежели каждый раз парсить все его тело в одном файле.
Тут двух мнений быть не может!
Зачастую по модулям разносят логические блоки. Например логика работы с вебом в одном с базой в другом - связка в третьем… и тд
Офлайн
MaratDЭто слишком много, нужно учиться разбивать.
Создал 25 классов. Судя по среде в которой пишу, написал около 4000 строк.
[guest@localhost ~]$ echo -e "abc\nabcdef\nghi" | cat -n
1 abc
2 abcdef
3 ghi
[guest@localhost ~]$ echo -e "abc\nabcdef\nghi" | cat -n | grep a
1 abc
2 abcdef
[guest@localhost ~]$ echo -e "abc\nabcdef\nghi" | grep e | cat -n | grep a
1 abcdef
[guest@localhost ~]$ echo -e "abc\nabcdef\nghi" | cat -n | grep a | grep e
2 abcdef
[guest@localhost ~]$
Отредактировано py.user.next (Дек. 9, 2016 02:57:46)
Офлайн
Спасибо за ответы.
Еще вопрос по этой теме. На скорость работы программы разбиение на модули влияет? Имею в виду большое количество модулей не замедляет работу?
Офлайн
MaratD
Спасибо за ответы.
Еще вопрос по этой теме. На скорость работы программы разбиение на модули влияет? Имею в виду большое количество модулей не замедляет работу?
Офлайн
MaratDНет, там так всё устроено, что загружаются они один раз при первом использовании, а потом кешируются и используются уже из кеша.
На скорость работы программы разбиение на модули влияет?
Отредактировано py.user.next (Дек. 9, 2016 10:41:29)
Офлайн
Всем спасибо еще раз. Хорошо, что есть такие форумы и знающие специалисты. Сегодня глянул модуль одной из библиотек, которую использую (для работы с DBF). Насчитал там около 40 классов и около 8000 строк кода. Напрашивается вопрос. Как так пишут? Или в этом случае по другому не получится?
И еще.
py.user.next написал:
Функции не должны знать друг о друге.
Классы не должны знать друг о друге.
Модули не должны знать друг о друге.
У меня с одного класса вызывается другой. Как в этом случае классы могут не знать друг о друге? Или я не так понял. Если можно короткий пример, хотя бы в виде алгоритма.
Офлайн
MaratDСлово “знать” здесь, конечно, условное. Имеется в виду, что одна сущность инкапсулирует данные и логику, в которые другая сущность не должна вмешиваться, а еще лучше не иметь доступа вообще. Если у нас есть класс Something, то он для всего окружающего мира он - черный ящик, есть его внешний интерфейс (API) и только через него другие классы/функции с ним общаются. Никаких общих глобальных переменных, никаких глобальных побочных эффектов при вызове методов, никакого изменения состояния объекта А изнутри объекта Б напрямую, только через API. Кроме того, программа хорошо написана, когда различные компоненты между собой слабо связаны. То есть мы можем взять из модуля А класс Б и использовать его независимо от всего остального содержимого модуля, класс (и функция) - самостоятельная независимая единица кода, которая не должна быть прибита гвоздями к другому коду. А если все-таки класс А имеет в зависимостях объект класса Б, то мы должны иметь возможность вносить изменения в реализацию класса Б не меняя ничего в классе А, и наоборот.
Как в этом случае классы могут не знать друг о друге?
Офлайн
MaratDЭто, как правило, ускоряет работу. Правда, я не понял, чью работу вы имеете в виду?
Еще вопрос по этой теме. На скорость работы программы разбиение на модули влияет? Имею в виду большое количество модулей не замедляет работу?
Офлайн
MaratDВ таких случаях делаются интерфейсы и классы общаются через эти интерфейсы. А интерфейс - это как отдельный класс, но только для общения. То есть ты делаешь класс и делаешь интерфейс и из класса обращаешься к этому интерфейсу (посылаешь ему что-нибудь или принимаешь от него). А потом другой класс должен реализовать этот интерфейс.
У меня с одного класса вызывается другой. Как в этом случае классы могут не знать друг о друге?
Отредактировано py.user.next (Дек. 11, 2016 04:20:40)
Офлайн