转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826299.html

一:Mixin模式

Mixin编程是一种开发模式,是一种 将多个不同类中的功能单元的进行组合利用的方式。

    Mixin模式是通过python的多继承机制实现的,但是又与单纯的类继承有所区别:

1)用作Mixin的类,不作为任何类的基类;

2)用做Mixin的类不关心将会和什么类一起被继承使用,它只会在子类定义时按需继承进来;

3)用作Mixin的类通常都会实现一种通用的功能,相当于一种工具箱,即插即用;

二:Mixin模式的优势

1) 可以在不修改任何已有类的源代码的情况下,对已有类进行功能扩展;

2)可以保证组件化编程,将可复用的功能封装为一个Mixin类,按需继承使用;

3)子类可以根据需要,使用已有的Mixin功能类们进行组合,来实现“新的自己”;

4)突破了类继承的局限性,以往扩展新功能需要开发新的子类,现在只需要在自身的多继承中添加一个Mixin类即可。

三:Mixin的原理

首先我们来看一下Python类的一个隐藏属性:__mro__

This attribute is a tuple of classes that are considered when looking for base classes during method resolution.

它的值是一个元组,元组的元素是该类所继承的类。当子类中调用self.method()或super()时,方法调用会从子类自身查起,沿着继承链条(__mro__属性数组从左到右的顺序)逐个类 地检索符合的方法并调用。

因此,我们通过Mixin模式为某类添加了新的内容后,在子类中可以直接通过self.method()或super().method()即可无误地调用到我们插入进来的功能啦。

Python的Mixin的更多相关文章

  1. python用法——Mixin

    在读werkzeug和flask的源码中,经常能遇到类名中有mixin这个东西.这个东西的用法让我想到了java中的接口名有able的用法.今天我就来看了看这个mixin是什么东西. 学习了pytho ...

  2. 关于Python的Mixin模式

    转自:http://www.bjhee.com/python-mixin.html 像C或C++这类语言都支持多重继承,一个子类可以有多个父类,这样的设计常被人诟病.因为继承应该是个”is-a”关系. ...

  3. 【转载】关于Python的Mixin模式

    本博按: mixin是看起来是多继承的一种,但是,这种继承并不作为父类存在,而是增加功能到子类中. 像C或C++这类语言都支持多重继承,一个子类可以有多个父类,这样的设计常被人诟病.因为继承应该是个” ...

  4. 通过 Python 理解 Mixin 概念

    Mixin 的概念 Mixin 即 Mix-in,常被译为"混入",是一种编程模式,在 Python 等面向对象语言中,通常它是实现了某种功能单元的类,用于被其他子类继承,将功能组 ...

  5. Python 的 Mixin 类(转)

    转1:https://www.cnblogs.com/aademeng/articles/7262520.html 转2:https://blog.csdn.net/u010377372/articl ...

  6. Python Mixin混入的使用方法

    DEMO # encoding=utf-8 __author__ = 'kevinlu1010@qq.com' class Base(): def f1(self): print 'I am f1 i ...

  7. python面向对象高级:Mixin多重继承

    继上一篇学习笔记:python面向对象的继承与多态,本篇就Mixin扩展类的方法写下学习笔记 Mixin Mixin编程是一种开发模式,是一种将多个类中的功能单元的进行组合的利用的方式,这听起来就像是 ...

  8. (转)Python Mixins 机制

    原文:https://github.com/dengshuan/notes/blob/master/techs/python-mixins.org https://blog.csdn.net/u012 ...

  9. python--包package、模块module、类Class、Mixin类(未完成)

    包package>模块module>类Class(包含了属性.方法.实例等概念) 模式一:一个包下面有多个py文件,即多个模块module 模式二:一个包下面包含多个子包packages ...

随机推荐

  1. eclipse中自动生成serialVersionUID

     serialVersionUID作用:  序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性.       如果你修改代码重新部署后出现序列化错误,可以考虑给相应的类增加seri ...

  2. Linux 进程树查看工具 pstree

    pstree 是 Linux 下的一个用于展示进程树结构的工具,类似于 tree 展示目录树一样,可视化地查看进程的继承关系.pstree 工具其实是 PSmisc 工具集的成员之一,PSmisc 工 ...

  3. SqlServer事务语法及使用方法(转)

    原博:http://blog.csdn.net/xiaouncle/article/details/52891563 事务是关于原子性的.原子性的概念是指可以把一些事情当做一个不可分割的单元来看待.从 ...

  4. springcloud的Hystrix turbine断路器聚合监控实现(基于springboot2.02版本)

    本文基于方志朋先生的博客实现:https://blog.csdn.net/forezp/article/details/70233227 一.准本工作 1.工具:Idea,JDK1.8,Maven3. ...

  5. Python 和 Flask 设计 RESTful API

    #!flask/bin/python from flask import Flask, jsonify from flask import make_response app = Flask(__na ...

  6. HTML5 - websocket的应用 之 简易聊天室

    需要知识点: 前端知识 jq操作dom nodejs socket.io 关于websocket api的知识点,见上篇章<HTML5-Websocket>. 聊天室思路/原理: A和B聊 ...

  7. 【BigData】Java基础_Eclipse配置自动补全new

    需求描述 在使用Eclipse的时候,每次new一个对象,写起来比较麻烦,以下是配置Eclipse,然后使用快捷键补全new方法的步骤,此配置使用官方属于叫做:配置自动分配局部变量 配置步骤 打开Wi ...

  8. SpringCloud组件学习-图

    图很清晰,直接放大浏览器,或者下载下来放大看

  9. .net core 中的多环境配置

    参考地址:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/environments?view=aspnetcore-2.2 官网说环 ...

  10. serializers进阶

    文章出处  https://www.cnblogs.com/pyspark/p/8607801.html [01]前言    serializers是什么?官网是这样的”Serializers all ...