需要创建几张表,每张表有大量通用字段,想通过继承来复用这些字段
创建了一个 metaclass 来增加类属性,但是报 metaclass conflict 了
TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases
按报错需要子类的元类继承自所有父类的元类,尝试去继承 db.Model 的元类好像有点问题
代码如下
class MetaRank(type):
def __new__(cls, name, bases, attrs):
attrs.update({
'id': db.Column(db.Integer),
'rank1': db.Column(db.Integer),
'rank2': db.Column(db.Integer),
'rank3': db.Column(db.Integer),
'rank4': db.Column(db.Integer),
'rank5': db.Column(db.Integer),
'rank6': db.Column(db.Integer),
})
return type.__new__(cls, name, bases, attrs)
class BaseRank(object, metaclass=MetaRank):
pass
class MovieRank(db.Model, BaseRank):
work_id = db.ForeignKey('movie.id')
class PhotoRank(db.Model, BaseRank):
work_id = db.ForeignKey('photo.id')
不知道我表述清楚了没,大概意思和这篇文章一样 https://www.dreamincode.net/forums/topic/324123-metaclass-for-a-class-extending-from-sqlalchemy-declarative-base/