Sqlalchemy: избегать множественного наследования и иметь абстрактный базовый класс

Поэтому у меня есть несколько таблиц, использующих SQLAlchemy, которые моделируются как объекты, которые наследуются от результата до вызоваdeclarative_base(), То есть:

Base = declarative_base()
class Table1(Base):
    # __tablename__ & such here

class Table2(Base):
     # __tablename__ & such here

И т.д. Я тогда хотел иметь некоторые общие функциональные возможности, доступные для каждого из моих классов таблицы БД,самый простой способ сделать это в соответствии с документами это просто сделать множественное наследование:

Base = declarative_base()

class CommonRoutines(object):
    @classmethod
    def somecommonaction(cls):
        # body here

class Table1(CommonRoutines, Base):
    # __tablename__ & such here

class Table2(CommonRoutines, Base):
     # __tablename__ & such here

Что мне не нравится в этом, так это A) множественное наследование в целом немного непривлекательно (становится сложно разрешать такие вещи, какsuper() звонки и т. д.), B) если я добавлю новую таблицу, я должен запомнить, чтобы наследовать от обоихBase а такжеCommonRoutinesи C) действительно, что в некотором смысле класс "CommonRoutines" является типом таблицы "a-a". Действительно чтоCommonBase is является абстрактным базовым классом, который определяет набор полей и процедур, общих для всех таблиц. Иными словами, абстрактная таблица "свое-а".

Итак, что я хотел бы это:

Base = declarative_base()

class AbstractTable(Base):
    __metaclass__ = ABCMeta  # make into abstract base class

    # define common attributes for all tables here, like maybe:
    id = Column(Integer, primary_key=True)

    @classmethod
    def somecommonaction(cls):
        # body here

class Table1(AbstractTable):
    # __tablename__ & Table1 specific fields here

class Table2(AbstractTable):
     # __tablename__ & Table2 specific fields here

Но это, конечно, не работает, так как я тогда должен А) определить__tablename__ заAbstractTable, B) аспект ABC вещей вызывает все виды головных болей, и C) должен указывать на своего рода связь БД междуAbstractTable и каждый отдельный стол.

Поэтому мой вопрос: возможно ли достичь этого разумным способом? В идеале я хотел бы обеспечить:

Нет множественного наследованияCommonBase/AbstractTable быть абстрактным (то есть не может быть создан)

Ответы на вопрос(3)

Ваш ответ на вопрос