Python 如何创建mixin以在类中使用@property
我有以下课程Python 如何创建mixin以在类中使用@property,python,django,Python,Django,我有以下课程 class UserProfile(models.Model): # ... @property def get_fields(self): return [(field.name, field.value_to_string(self)) for field in UserProfile._meta.fields] 我想在我的所有类上使用该属性。所以我想做一个混音 class HelperMixin(object): @prope
class UserProfile(models.Model):
# ...
@property
def get_fields(self):
return [(field.name, field.value_to_string(self)) for field in UserProfile._meta.fields]
我想在我的所有类上使用该属性。所以我想做一个混音
class HelperMixin(object):
@property
def get_fields(self):
return [(field.name, field.value_to_string(self)) for field in UserProfile._meta.fields]
问题是,属性中有特定于类的代码。如何将代码推广到其他类中
当我像这样使用它时,有什么区别:
class UserProfile(models.Model, HelperMixin)
像这样
class UserProfile(HelperMixin, models.Model)
使用
self.\u meta.fields
,实例上也可以使用类成员:
class HelperMixin(object):
@property
def get_fields(self):
return [(field.name, field.value_to_string(self)) for field in self._meta.fields]
类用户配置文件(models.Model,HelperMixin)
和类用户配置文件(HelperMixin,models.Model)
之间的区别在于MRO(方法解析顺序)。将mixin放在基类之前似乎很自然,但只要基类和mixin没有同名的成员,就没有什么区别。这在抽象上很难回答。依赖关系的性质是什么?您可以将用于self.\uuuu class.\uuuu.\u meta.fields
中的字段,甚至可以将用于self.\u meta.fields
。旁注:好的样式是不要在属性上使用“get”前缀。只需使用字段
即可。我在前端使用此脚本: