我有以下课程
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)
VS。像这样
class UserProfile(HelperMixin, models.Model)
答案 0 :(得分:1)
使用self._meta.fields
,类成员也可用于实例:
class HelperMixin(object):
@property
def get_fields(self):
return [(field.name, field.value_to_string(self)) for field in self._meta.fields]
class UserProfile(models.Model, HelperMixin)
和class UserProfile(HelperMixin, models.Model)
之间的区别在于MRO(方法解析顺序)。在基类之前使用mixin似乎很自然,但只要base和mixin没有相同名称的成员就没有区别。