Лучшие соглашения об именовании классов с несколькими реализациями

#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 and P_B с самого начала, я прав?

2. В принципе, да, но я не думаю, что «A» и «B» являются хорошими именами для чего-либо. И «P» в этом отношении тоже, но я предполагаю, что вы просто используете их в качестве заполнителей?