Peewee 元类继承

Posted

技术标签:

【中文标题】Peewee 元类继承【英文标题】:Peewee Meta class inherence 【发布时间】:2021-05-01 12:29:27 【问题描述】:

我正在努力解决以下问题:

from my_db_definition import db
from peewee import *
class A(Model):
    class Meta:
        database=db
        table_name = 'random'
        
class B(A):
    pass

运行时

print(A._meta.table_name)
print(B._meta.table_name)
random
b

我现在的问题是,为什么在这种情况下更改了表名,这可以防止吗?我完全糊涂了

【问题讨论】:

【参考方案1】:

http://docs.peewee-orm.com/en/latest/peewee/models.html#model-options-and-table-metadata

文档列出了哪些选项是继承的,哪些不是。

只有某些属性通过内部“元”类传递给子类。它的目的是 1) 命名空间,以及 2) 围绕 DRY 代码提供约定。

表名没有被继承,因为您可能只希望每个表有一个类,而数据库继承,因为只声明一次是有意义的。

【讨论】:

以上是关于Peewee 元类继承的主要内容,如果未能解决你的问题,请参考以下文章

为啥元类不能访问由元类定义的类的子类继承的属性?

python元类继承问题

避免使用元类继承生成的类属性

unittest 模拟和多重继承:TypeError:元类冲突

三重继承导致元类冲突......有时

三重继承导致元类冲突......有时