关于使用Mixin设计模式进行Python编程的方法讲解
Mixin模式是一种在python里经常使用的模式,适当合理的应用能够达到复用代码,合理组织代码结构的目的。
Python的Mixin模式可以通过多继承的方式来实现, 举例来说,我们自定义一个简单的具有嵌套结构的数据容器:
class SimpleItemContainer(object): def __init__(self, id, item_containers): = id = {} for item in item_containers: [] = item
SimpleItemContainer通过python内置类型Dict来存放数据,不过到目前为止想要访问对应的数据还是得直接调用里面的字典,没法像原生的字典一样方便的通过暴露出来的api访问数据。当然也可以从头开始把完整的ionary Interface完全实现个遍,不过在每个自定义的类似的容器中都来一套肯定不行,这时候利用python内置的Mixin就是一个不错的方式:
from UserDict import DictMixin
class BetterSimpleItemContainer(object, DictMixin): def __getitem__(self, id): return [id] def __setitem__(self, id, value): [id] = value def __delitem__(self, id): del [id] def keys(self): return ()
通过实现最小的Dictionary Interface,还有继承DictMixin实现Mixin模式,我们就轻松获得了完整的原生字典的行为:下表语法,get, has_keys, iteritems, itervalues甚至还有iterable protocol implementation等一系列的方法和实现。
很多框架比如Django, Django rest framework里面就普遍用到了Mixin这种模式,定义api或者viewset的时候就能够通过多重继承的方式服用一些功能
当然,Mixin模式也不能滥用,至少他会污染你新定义的类,有时候还会带来MRO的问题;不过把一些基础和单一的功能比如一般希望通过interface/protocol实现的功能放进Mixin模块里面还是不错的选择:
class CommonEqualityMixin(object): def __eq__(self, other): return (isinstance(other, self.__class__) and self.__dict__ == other.__dict__) def __ne__(self, other): return not self.__eq__(other)class Foo(CommonEqualityMixin): def __init__(self, item): = item
其实整个理解下来无非就是通过组合的方式获得更多的功能,有点像C#, java里面的interface,强调“it can”的意思,但相比起来简单多了,不需要显示的约束,而且mixin模块自带实现。在使用的时候一般把mixin的类放在父类的右边似乎也是为了强调这并不是典型的多继承,是一种特殊的多继承,而是在继承了一个基类的基础上,顺带利用多重继承的功能给这个子类添点料,增加一些其他的功能。保证Mixin的类功能单一具体,混入之后,新的类的MRO树其实也会相对很简单,并不会引起混乱。
-
《父亲的菜园》教案设计
作为一名教职工,常常要写一份优秀的教案,借助教案可以提高教学质量,收到预期的教学效果。我们该怎么去写教案呢?以下是小编精心整理的《父亲的菜园》教案设计,欢迎阅读,希望大家能够喜欢。《父亲的菜园》教案设计1教学目标1、借助字典,认识“婴、毅、肿”等8个生字。2...
-
产品包装设计的魅力怎样体现?
试想一下,当你在规划好的时间内去商场购物,面对多达千万种的琳琅产品,如何能够既高效、又准确地选定心仪的一款进行购买呢?每一个细节都经过了仔细的考虑,修改后再在商场的货架上进行测试。对包装设计的修改常常精确到一毫一厘,因为设计者们不仅仅把它们看成是一件...
-
(通用)设计房子的作文400字
在日复一日的学习、工作或生活中,大家对作文都不陌生吧,借助作文人们可以实现文化交流的目的。相信许多人会觉得作文很难写吧,下面是小编为大家整理的设计房子的作文400字5篇,欢迎大家分享。设计房子的作文400字篇1过了许多年,我当上了工程师,心里有个愿望,做一个自己...
-
不等式基本性质教学设计
作为一名专为他人授业解惑的人民教师,时常要开展教学设计的准备工作,教学设计把教学各要素看成一个系统,分析教学问题和需求,确立解决的程序纲要,使教学效果最优化。写教学设计需要注意哪些格式呢?以下是小编精心整理的不等式基本性质教学设计,欢迎大家分享。不等式基...
相关文章
- 关于暑假计划英语作文:Plan for the Coming Summer Holiday
- 六年级英语It`s going to snow in Harbin教程设计
- 外研社一起Module10 UNIT2《Whats sixty plus thirty》教学案例
- 编写谈论考试的对话 Talking about the Examination
- 八年级英语下册unit 7《Would you mind turning down the music?》教学设计
- 关于学习下学期 Unit 30 Mainly revision的建议
- 英文演讲稿Express opinion efficiently
- MacBook Pro with Retina display 不适合做网页设计吗?
- Python设计模式:工厂方法模式讲解
- 关于下学期 Unit 30 Mainly revision教学目标