假设我有类SuperModel
、Model
和SubModel
。你知道吗
我想定义一个全局属性“collection”,它是类的名称。例如,如果我这样做:
Model.collection
它将返回“Model”。你知道吗
如果我将模型子类化,就说class SubModel(Model)
Submodel.collection
将返回“Submodel”
有没有一种方法可以做到这一点,而不必显式地重写模型所有子代的属性?你知道吗
我试图从元类中得到一些东西:
class SuperModel(type):
def __new__(cls, name, base, attrs):
if 'collection' not in attrs:
attrs['collection'] = __name__.lower()
return super().__new__(cls, name, base, attrs)
class Model(metaclass=SuperModel):
pass
但是,当我尝试对Model进行子类化(例如class SubModel(Model)
)时,当我需要“SubModel”时,在打印“collection”时总是得到“Model”。你知道吗
编辑:我知道有一个__name__
属性,但是如果我想在每次定义类时将__name__
赋值给类变量呢?因此,当子类化模型时,子模型中会有一个属性'collection',等于__name__
('SubModel')。你知道吗
您正在元类中使用模块global
__name__
。这既不是元类型的名称,也不是类的名称。你知道吗您的元类已经在
name
属性中获得了新类的名称。简单地说:已经有这样一个内置属性,它被称为
__name__
。你知道吗相关问题 更多 >
编程相关推荐