Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何创建mixin以在类中使用@property_Python_Django - Fatal编程技术网

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”前缀。只需使用
字段
即可。我在前端使用此脚本: