|
Python: как код разделить на имплементацию и интерфейсы?
|
|||
---|---|---|---|
#18+
В С++ есть возможность создавать пространства имен, внутри которых определять процедуры и классы. Это позволяет отделить "низкоуровневый" код от интерфейса. Понимаю, что в Python можно создавать дополнительные модули (например, с постфиксом dev от слова development) и их импортировать в модули с интерфейсами, а последние импортировать в потребителя функционала. Но тогда в дереве модулей будет очень много лишних файлов и надо будет постоянно переключаться между файлами (чтобы посмотреть как все это реализовано). Есть какое- то решение? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2018, 10:45 |
|
Python: как код разделить на имплементацию и интерфейсы?
|
|||
---|---|---|---|
#18+
AlekseySQL, использование принципа "программируйте в соответствии с интерфейсом, а не с реализацией" позволяет создавать более гибкий дизайн приложения, разгрузить голову разработчика и улучшить коммуникации внутри команды. Все это делает систему более пригодной для поддержки и добавления новой функциональности. В Python нет ключевого слова interface , но есть другие способы реализации принципа: отражающие суть названия, устранение неявных зависимостей и использование абстрактных классов. https://habr.com/post/332578/ ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2018, 15:04 |
|
Python: как код разделить на имплементацию и интерфейсы?
|
|||
---|---|---|---|
#18+
Дмитрий МухAlekseySQL, использование принципа "программируйте в соответствии с интерфейсом, а не с реализацией" позволяет создавать более гибкий дизайн приложения, разгрузить голову разработчика и улучшить коммуникации внутри команды. Все это делает систему более пригодной для поддержки и добавления новой функциональности. В Python нет ключевого слова interface , но есть другие способы реализации принципа: отражающие суть названия, устранение неявных зависимостей и использование абстрактных классов. https://habr.com/post/332578/ Спасибо, но это все и так понятно. Вопрос в другом: при использовании абстрактного класса нам будет виден как он, так и конкретные реализации, что засоряет глобальное пространство имен. Хочется отделить "кишки", от интерфейса. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2018, 15:30 |
|
Python: как код разделить на имплементацию и интерфейсы?
|
|||
---|---|---|---|
#18+
AlekseySQLДмитрий МухAlekseySQL, использование принципа "программируйте в соответствии с интерфейсом, а не с реализацией" позволяет создавать более гибкий дизайн приложения, разгрузить голову разработчика и улучшить коммуникации внутри команды. Все это делает систему более пригодной для поддержки и добавления новой функциональности. В Python нет ключевого слова interface , но есть другие способы реализации принципа: отражающие суть названия, устранение неявных зависимостей и использование абстрактных классов. https://habr.com/post/332578/ Спасибо, но это все и так понятно. Вопрос в другом: при использовании абстрактного класса нам будет виден как он, так и конкретные реализации, что засоряет глобальное пространство имен. Хочется отделить "кишки", от интерфейса. Что значит «будет виден»? Разнеси интерфейс и реализацию по разным пакетам/модулям, не будет никакого общего пространства имён. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2018, 19:06 |
|
Python: как код разделить на имплементацию и интерфейсы?
|
|||
---|---|---|---|
#18+
Лысый дядькаЧто значит «будет виден»? Разнеси интерфейс и реализацию по разным пакетам/модулям, не будет никакого общего пространства имён. Я в топике написал, что этот вариант плох тем, что в дереве модулей будет избыточное количество файлов + периодически надо будет открывать имплементацию, чтобы посмотреть как это реализовано. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2018, 14:53 |
|
Python: как код разделить на имплементацию и интерфейсы?
|
|||
---|---|---|---|
#18+
AlekseySQLЛысый дядькаЧто значит «будет виден»? Разнеси интерфейс и реализацию по разным пакетам/модулям, не будет никакого общего пространства имён. Я в топике написал, что этот вариант плох тем, что в дереве модулей будет избыточное количество файлов + периодически надо будет открывать имплементацию, чтобы посмотреть как это реализовано. Ты опять на пустом месте заводишь дискуссию, ни к чему не ведущую. Тебе уже сказали: Выноси логику в приватные модули, например, имя которых начинается с символа подчёркивания. Выставляй у нужных объектов интерфейса аттрибут __slots__, в т.ч. и у самих модулей. Исследуй как это сделано у крупных проектов. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2018, 15:05 |
|
Python: как код разделить на имплементацию и интерфейсы?
|
|||
---|---|---|---|
#18+
Нашел, что это делается с помощью списка __all__, который можно задать для каждого модуля или с помощью префикса в виде знака подчеркивания для скрытых переменных / функций / объектов модуля. Написано это в книжке Слаткина "Секреты Python, 59 рекомендаций по написанию эффективного кода", на странице 225. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2018, 16:14 |
|
|
start [/forum/topic.php?fid=23&msg=39732661&tid=1460083]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 141ms |
0 / 0 |