Соглашения об именах классов между похожими модулями? - PullRequest
0 голосов
/ 24 мая 2019

У меня есть пакет с тремя модулями (см. Шаблонный модуль ниже):

|____mypackage
| |______init__.py
| |____serial.py
| |____modbus.py
| |____base.py

base имеет абстрактный класс BaseClient, который обеспечивает высокоуровневую логику приложения, посредством которой пользователи взаимодействуют сбазовые реализации клиента.

serial и modbus каждая имеет класс, который обеспечивает высокоуровневую сетевую логику, которую я в настоящее время называю BaseSerial и BaseModbus.Эти модули также имеют несколько классов, которые являются конкретными реализациями BaseClient и также наследуются от их соответствующих BaseSerial / BaseModbus классов.

Мой вопрос: существуют ли какие-либо стандартные / предпочтительные соглашения об именахдля классов типа BaseSerial / BaseModbus? (мне кажется, что дать им одно и то же имя, например, BaseNetworking, было бы чище и интуитивно понятнее, но я также мог видеть, как это может вызвать проблемы).)

Или, возможно, более уместные вопросы:

  • Является ли эта структура пакета даже хорошей практикой?
  • Должны ли все эти классы быть в одном модуле, таким образом,мой вопрос н / д?
  • Есть ли смысл разделять абстрактные классы на отдельные модули от разных типов конкретных реализаций, или это слишком фрагментированный дизайн?

Я прочитал Соглашения об именах PEP-8 и не смогли найти ничего, связанного с именованными классами с пространством имен и / или с тем, чтобы учитывать имена схожих классов в разных пространствах имен.Кроме того, я не смог найти комментарий о том, как лучше отделить (или не отделить) абстракции от конкретных реализаций.

Ниже приведены стандартные реализации описываемого мной пакета:

base шаблон:

class BaseClient:
    def doAppLogic(self):
        ....

    def read(self):
        raise NotImplementedError

    def connect(self):
        raise NotImplementedError

serial шаблон:

import base

class BaseSerial:
    def connect(self):
        ...

class SerialSubclass1(BaseSerial, base.BaseClient):
    def read(self):
        if self.connect():
            ...

modbus шаблон:

import base

class BaseModbus:
    def connect(self):
        ...

class MobusSubclass1(BaseModbus, base.BaseClient):
    def read(self):
        if self.connect():
            ...

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

...