#python #oop #naming-conventions #factory-pattern
#python #ооп #соглашения об именовании #фабричный шаблон
Вопрос:
Я имею дело с проектом, в котором мне нужно реализовать довольно сложную структуру данных P несколькими способами (все они на python). Надеясь, что это может быть какой-то помощью, вот как я структурировал часть своего проекта:
P/
|---- A/
| |----p.py
|
|---- B/
| |----p.py
|
|----factory.py
|----abstractP.py
у p.py
меня есть различные реализации P в качестве классов. Все они называются одинаково, как P
(все они соответствуют интерфейсу, поскольку они наследуются от класса abstractP
, который расширяется ABCMeta
).
Я планирую использовать фабричный шаблон для правильного создания экземпляра объекта класса P
путем указания параметра. На данный момент factory.py
я избегаю конфликтов имен, используя приемы импорта python:
from P.A.p import P as P_A
from P.B.p import P as P_B
Я делаю это, думая, что я мог бы использовать p.py
файлы независимо в следующем проекте, поэтому я не называю классы P_A
и P_B
с самого начала.
Это плохая практика? Каково было бы наилучшее соглашение об именовании для реализаций в этом контексте?
Ответ №1:
Вероятно, вам следует назвать их в честь какого-то конкретного аспекта их реализации.
Возьмем, к примеру, пару типичных реализаций контейнера типа списка:
- список абстрактных классов (определяет основные интерфейсы / поведение «списка»)
- класс LinkedList (реализация связанного узла такого поведения)
- класс ArrayList (реализация этого поведения на основе массива)
Вы называете конкретные реализации после того, как они реализованы.
Комментарии:
1.
A
иB
являются частями имени реализации, сами сделали имя. Короче говоря, вы хотите использоватьP_A
andP_B
с самого начала, я прав?2. В принципе, да, но я не думаю, что «A» и «B» являются хорошими именами для чего-либо. И «P» в этом отношении тоже, но я предполагаю, что вы просто используете их в качестве заполнителей?