我的项目中有一个抽象模型,我想用它在具体子类上默认定义一个字段,但也允许将该字段动态重新定义为默认值以外的其他内容。所有这些现在都有效:
class classproperty(object):
"""
Decorator for making class properties
"""
def __init__(self, fget):
self.fget = fget
def __get__(self, owner_self, owner_cls):
return self.fget(owner_cls)
class BaseModel(models.Model):
class Meta(object):
abstract = True
@classproperty
def _special_attribute_field(self):
return getattr(self, '_bm_special_attribute_field', 'default')
@property
def bm_special_attribute(self):
return getattr(self, self._special_attribute_field)
...然后有一堆方法使用后两个函数来确定要访问哪个字段。
问题是,现在,继承自的类BaseModel
必须显式定义该default
字段,即使它们不_bm_special_attribute_field
用于指定默认值以外的其他内容。我想做的是以编程方式定义default
具体子模型,前提是这些模型不用于_bm_special_attribute_field
将其更改为其他东西,在这种情况下,它们应该带来自己的字段。有没有办法做到这一点,也许是元类?关键是它不能破坏 Django 机器。