相关疑难解决方法(0)

什么是mixin,为什么它们有用?

在" 编程Python "中,Mark Lutz提到了"mixins".我来自C/C++/C#背景,我之前没有听过这个词.什么是mixin?

这个例子的行之间进行读取(我已经链接到了因为它很长),我假设这是一个使用多重继承来扩展类而不是"正确"子类的情况.这是正确的吗?

为什么我要这样做而不是将新功能放入子类?就此而言,为什么mixin/multiple继承方法比使用组合更好?

mixin与多重继承的区别是什么?这仅仅是语义问题吗?

python oop multiple-inheritance mixins

875
推荐指数
16
解决办法
27万
查看次数

Django:为可重用模型字段创建Mixin

我想在项目中的每个模型中添加一些字段.例如,这些字段是"跟踪字段",例如创建日期,更新日期和"活动"标志.我正在尝试创建一个我可以添加到每个模型类的Mixin,它允许我通过多重继承添加这些额外的字段.但是,在创建对象实例时,看起来我通过Mixin添加的模型字段显示为对象的方法而不是数据库字段.

In [18]: Blog.objects.all()[0].created
Out[18]: <django.db.models.fields.DateTimeField object at 0x10190efd0>
Run Code Online (Sandbox Code Playgroud)

这是我的模型的样子:

from django.db import models

class Blog(models.Model, TrackingFieldMixin):
    name = models.CharField(max_length=64)
    type = models....


class TrackingFieldsMixin():

    active = models.BooleanField(default=True, 
        help_text=_('Indicates whether or not this object has been deleted.'))
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)

    class Meta:
        abstract = True
Run Code Online (Sandbox Code Playgroud)

所以这似乎不起作用.有谁知道我如何能够为类似于上面的常见模型字段创建可重用的mixin?这种方法有缺陷吗?

谢谢你的帮助,乔

更新:请注意,我计划使用mixin的一些模型使用MPTT模型,因此我不能简单地将我的TrackingFieldMixin混合到基类中并仅从中继承.

class Post(MPTTModel, TrackingFieldMixin):
    post_name = models....
    post_type = models...
Run Code Online (Sandbox Code Playgroud)

django meta inheritance model mixins

18
推荐指数
1
解决办法
5826
查看次数

标签 统计

mixins ×2

django ×1

inheritance ×1

meta ×1

model ×1

multiple-inheritance ×1

oop ×1

python ×1