2010-09-28 4 views
3

У меня есть проект, над которым я работаю (http://github.com/lusis/vogeler). Одна из целей - обеспечить возможность поддержки с возможностью резервного копирования и обмена сообщениями. Я думаю, что у меня есть работоспособная модель, но я хотел получить от толпы Python информацию о лучших практиках. Вы можете увидеть новую реализацию здесь:Правильный способ создания слоя абстракции в python

http://github.com/lusis/vogeler/blob/master/vogeler/db/generic.py

couch2.py это мой подкласс родовым.

По существу общий класс предоставляет общий набор интерфейсов (createdb, usedb, create, update), которые вызывают частные методы, такие как _create_db, _use_db и т. Д.

Мое предположение, что материал базы данных будет подклассифицировать GenericPersistence и переопределить частные методы. Это считается плохой формой? Переопределение частных методов в целом кажется странным, но конечным результатом является то, что он работает. Я просто хочу убедиться, что я не нарушаю какой-то неписанный контракт о подклассе в Python.

+1

Вы должны посмотреть на модуль 'abc', чтобы сделать ваш общий объект абстрактным классом – Daenyth

+0

Я думаю, что модуль abc может быть переполнен на этом этапе? Мне нужно будет прочитать более подробную информацию об этом, но беглый взгляд заставил меня подумать, что это было (overkill). – lusis

ответ

0

Я думаю, что, по договоренности, одно подчеркивание - это намек на то, что атрибут представляет собой деталь реализации, которая может быть изменена в будущем. Подклассы не должны переопределять или ссылаться на подчеркнутые методы, потому что их присутствие не может быть использовано.

Итак, я изменил бы подчеркнутые методы крючков: _update ->update_hook и попросить разработчик переопределить * методу _hook.

+0

Я предполагаю, что причина, по которой я ходила с именами _method, заключалась в том, чтобы действительно понять, что вы должны называть это, если вы не пишете постоянство, но мне нравится опция foo_hook. – lusis

+0

Итак, я реорганизовал использование соглашения об именовании hook_. Благодаря! – lusis