因此,我想使用Mixin's,而不是使用 Base 类,我还没有找到太多关于在 FLASK 中使用 Mixins 的文档。任何人都可以帮助我如何实现 Mixins 而不是这个抽象的 Base 类吗?
class Base(db.Model):
"""
Base class for models.
Define the base class for the models so others can inherit from it.
"""
__abstract__ = True
def save(self):
"""
Save to database.
Save instance of the object to database and commit.
"""
db.session.add(self)
db.session.commit()
def delete(self):
"""
Delete from database.
Deletes instance of an object from database
"""
db.session.delete(self)
db.session.commit()
class User(Base):
"""
Set up the User model.
Set …Run Code Online (Sandbox Code Playgroud) 我是Django的新手,并试图通过基于类的视图来了解mixins.根据我的理解,mixins是包含来自其他类的方法组合的类(类似于多重继承).
我下面的官方文档和搜索上做题,但不明白为什么TemplateResponseMixin是混入本身.不同类的哪些方法被注入TemplateResponseMixin?
要点https://gist.github.com/anonymous/68c3b072538ec48c2667f7db276e781b是我要记录的现有代码库中遇到的重复golang代码模式的最小简化示例。从它的用法看,它看起来像一个mixin,但是我自己或我的任何同事都没有真正在golang中看到这种模式。谁能告诉我这种模式的合适名称?
要点试图说明:
它似乎并不严格满足mixin的许多定义,因为它以编写M时无法理解的方式操纵宿主对象(可能修改宿主状态),并且不直接向宿主类型添加方法:
而且它似乎没有遵循我发现的一些自称为“ golang mixins”的模式:
的get_context_data类对象的属性的。
我PasswordContextMixin在django / contrib / auth / views.py中遇到
class PasswordContextMixin:
extra_context = None
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context.update({
'title': self.title,
**(self.extra_context or {})
})
return context
Run Code Online (Sandbox Code Playgroud)
我感到困惑context = super().get_context_data(**kwargs),因为它等于context = object.get_context_data(**kwargs)
In [15]: getattr(object, 'get_context_data')
AttributeError: type object 'object' has no attribute 'get_context_data'
Run Code Online (Sandbox Code Playgroud)
如何理解呢?
这是我的views.py代码
class DirectView(mixins.CreateModelMixin):
serializer_class=DirectSerializer
def perform_create(self, serializer):
serializer.save(user=self.request.user)
def post(self,request,*args,**kwargs):
return self.create(request,*args,**kwargs)
Run Code Online (Sandbox Code Playgroud)
和我的 urls.py
path('direct/',DirectView.as_view(),name='direct'),
Run Code Online (Sandbox Code Playgroud)
但每当我尝试运行服务器时,我都会收到错误
AttributeError: type object 'DirectView' has no attribute 'as_view'
Run Code Online (Sandbox Code Playgroud)
我不明白问题是什么?
我已经阅读Python-Mixin并了解到它为类增加了一些功能(方法)。同样,Java-Interfaces还提供类的方法。
我可以看到的唯一区别是它们Java-interfaces是抽象方法并Python-Mixin带有实现。
还有其他区别吗?
这是一种创建一个继承自10个以上类的类的pythonic方法吗?或许我应该考虑一种不同的方法?
python ×6
django ×3
mixins ×2
django-views ×1
go ×1
inheritance ×1
interface ×1
java ×1
oop ×1
sqlalchemy ×1