Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Python: как код разделить на имплементацию и интерфейсы? / 7 сообщений из 7, страница 1 из 1
11.11.2018, 10:45
    #39731277
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python: как код разделить на имплементацию и интерфейсы?
В С++ есть возможность создавать пространства имен, внутри которых определять процедуры и классы. Это позволяет отделить "низкоуровневый" код от интерфейса. Понимаю, что в Python можно создавать дополнительные модули (например, с постфиксом dev от слова development) и их импортировать в модули с интерфейсами, а последние импортировать в потребителя функционала. Но тогда в дереве модулей будет очень много лишних файлов и надо будет постоянно переключаться между файлами (чтобы посмотреть как все это реализовано).

Есть какое- то решение?
...
Рейтинг: 0 / 0
11.11.2018, 15:04
    #39731341
Дмитрий Мух
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python: как код разделить на имплементацию и интерфейсы?
AlekseySQL,

использование принципа "программируйте в соответствии с интерфейсом, а не с реализацией" позволяет создавать более гибкий дизайн приложения, разгрузить голову разработчика и улучшить коммуникации внутри команды.
Все это делает систему более пригодной для поддержки и добавления новой функциональности.
В Python нет ключевого слова interface , но есть другие способы реализации принципа: отражающие суть названия, устранение неявных зависимостей и использование абстрактных классов.

https://habr.com/post/332578/
...
Рейтинг: 0 / 0
11.11.2018, 15:30
    #39731348
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python: как код разделить на имплементацию и интерфейсы?
Дмитрий МухAlekseySQL,

использование принципа "программируйте в соответствии с интерфейсом, а не с реализацией" позволяет создавать более гибкий дизайн приложения, разгрузить голову разработчика и улучшить коммуникации внутри команды.
Все это делает систему более пригодной для поддержки и добавления новой функциональности.
В Python нет ключевого слова interface , но есть другие способы реализации принципа: отражающие суть названия, устранение неявных зависимостей и использование абстрактных классов.

https://habr.com/post/332578/

Спасибо, но это все и так понятно. Вопрос в другом: при использовании абстрактного класса нам будет виден как он, так и конкретные реализации, что засоряет глобальное пространство имен. Хочется отделить "кишки", от интерфейса.
...
Рейтинг: 0 / 0
13.11.2018, 19:06
    #39732661
Лысый дядька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python: как код разделить на имплементацию и интерфейсы?
AlekseySQLДмитрий МухAlekseySQL,

использование принципа "программируйте в соответствии с интерфейсом, а не с реализацией" позволяет создавать более гибкий дизайн приложения, разгрузить голову разработчика и улучшить коммуникации внутри команды.
Все это делает систему более пригодной для поддержки и добавления новой функциональности.
В Python нет ключевого слова interface , но есть другие способы реализации принципа: отражающие суть названия, устранение неявных зависимостей и использование абстрактных классов.

https://habr.com/post/332578/

Спасибо, но это все и так понятно. Вопрос в другом: при использовании абстрактного класса нам будет виден как он, так и конкретные реализации, что засоряет глобальное пространство имен. Хочется отделить "кишки", от интерфейса.

Что значит «будет виден»? Разнеси интерфейс и реализацию по разным пакетам/модулям, не будет никакого общего пространства имён.
...
Рейтинг: 0 / 0
14.11.2018, 14:53
    #39733041
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python: как код разделить на имплементацию и интерфейсы?
Лысый дядькаЧто значит «будет виден»? Разнеси интерфейс и реализацию по разным пакетам/модулям, не будет никакого общего пространства имён.

Я в топике написал, что этот вариант плох тем, что в дереве модулей будет избыточное количество файлов + периодически надо будет открывать имплементацию, чтобы посмотреть как это реализовано.
...
Рейтинг: 0 / 0
14.11.2018, 15:05
    #39733050
NekZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python: как код разделить на имплементацию и интерфейсы?
AlekseySQLЛысый дядькаЧто значит «будет виден»? Разнеси интерфейс и реализацию по разным пакетам/модулям, не будет никакого общего пространства имён.

Я в топике написал, что этот вариант плох тем, что в дереве модулей будет избыточное количество файлов + периодически надо будет открывать имплементацию, чтобы посмотреть как это реализовано.
Ты опять на пустом месте заводишь дискуссию, ни к чему не ведущую. Тебе уже сказали:
Выноси логику в приватные модули, например, имя которых начинается с символа подчёркивания.

Выставляй у нужных объектов интерфейса аттрибут __slots__, в т.ч. и у самих модулей.

Исследуй как это сделано у крупных проектов.
...
Рейтинг: 0 / 0
23.11.2018, 16:14
    #39737582
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python: как код разделить на имплементацию и интерфейсы?
Нашел, что это делается с помощью списка __all__, который можно задать для каждого модуля или с помощью префикса в виде знака подчеркивания для скрытых переменных / функций / объектов модуля. Написано это в книжке Слаткина "Секреты Python, 59 рекомендаций по написанию эффективного кода", на странице 225.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Python: как код разделить на имплементацию и интерфейсы? / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]