小编Mil*_*sic的帖子

Sqlalchemy:避免多重继承并具有抽象基类

所以我有一堆使用SQLAlchemy的表,它们被建模为从结果继承到调用的对象declarative_base().即:

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

class Table2(Base):
     # __tablename__ & such here
Run Code Online (Sandbox Code Playgroud)

等等.然后,我想为每个数据库表类提供一些常用功能,根据文档执行此操作的最简单方法是执行多重继承:

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
Run Code Online (Sandbox Code Playgroud)

我不喜欢这件事是A)多重继承一般有点狡猾(变得棘手解决诸如super()调用之类的东西等),B)如果我添加一个新表我必须记住从两者继承Base而且CommonRoutines,和C)实际上,"CommonRoutines"类在某种意义上是"一种"类型的表.真正CommonBase的是一个抽象基类,它定义了一组对所有表都通用的字段和例程.换句话说:"它是一个"抽象表.

那么,我想要的是:

Base = declarative_base()

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

    # define common attributes for all …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy multiple-inheritance

16
推荐指数
2
解决办法
7139
查看次数

标签 统计

multiple-inheritance ×1

python ×1

sqlalchemy ×1