如何创建mixin以在类中使用@property

时间:2014-08-13 18:26:13

标签: 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):
    @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)

1 个答案:

答案 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没有相同名称的成员就没有区别。