Python论坛  - 讨论区

标题:re: [python-chinese] 讨论一下Mixin吧!

2005年11月09日 星期三 13:52

Du Jun jdu at haiercct.com.cn
Wed Nov 9 13:52:38 HKT 2005

《python编程宝典》里面把mixin用在多继承里面,我理解的意思是这样:
class A:
	def a():
		pass
	def .....
		......

class iMixin:
	def b():
		pass

class B (iMixin,A):pass

然后结果就是
class B中既有了A的成员,方法,又有了iMinin类的,
这样的话,这个所谓的mixin与C++等oo语言的多继承有什么不同呢?


另外,fred.li.1979.m.bj.prc at gmail.com的理解中
你执行
newbie1().data_attribute = "com1"
之后newbie1类动态的改变了,但这对MixinBase有什么影响呢?
现在的MixinBase里面应该还是只是个 pass 吧?
类似的
newbie2().method_attribute(1,2)
对MixinBase基类有什么影响啊??
看起来就是两继承了MixinBase的类,在运行时动态的改变了本身而已啊?
请教.....


> > 我理解的Mixin
> > class MixinBase:pass
> > class newbie1(MixinBase):pass
> > class newbie2(MixinBase):pass
> > newbie1().data_attribute = "com1"
> > def f(self,b,c):
> > newbie2().method_attribute = f
> > newbie2().method_attribute(1,2)
> >
> > Plugin
> >
> > ?木头给个简单的例子
> >
> > 插入点识别机制
> >
> > ?木头给个简单的例子
>
> 我的另一封邮件写了一个例子。简单点说:
>
> mixin是一类技术,我分为Mixin与Plugin两类。
>
> Mixin是对原类的属性或方法:增加、替换或合并。对于方法只能替换。
> Plugin是对原类某个方法嵌入新代码。因此Plugin只有方法,没有其它类型的对象。
> --
原来如比!!这里的Plugin 不是通常软件中的插件开发,
普通的插件是指利用给出的API 开发可以与原软件合作的小部件,软件;
newEdit 中的Plugin 不过是种名称,是种浅度mixin 的扩展行为,是也乎!?

这样的话,不如使用比较容易理解的说明方式?!
newEdit 中广泛使用了 mixin 思想,所有功能通过两种行为进行开发和扩展:
1. Mix -- 对预设类的全面混入定制,增加、替换或合并属性或方法
2. Embed -- 对预设类的方法嵌入定制,增加、替换或修改原始方法

是也乎!?这样比较明了的说?!

--
# Time is unimportant, only life important!
## 面朝开源,我心自由!

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年11月09日 星期三 15:02

limodou limodou at gmail.com
Wed Nov 9 15:02:10 HKT 2005

在 05-11-9,Du Jun<jdu at haiercct.com.cn> 写道:
> 《python编程宝典》里面把mixin用在多继承里面,我理解的意思是这样:
> class A:
>         def a():
>                 pass
>         def .....
>                 ......
>
> class iMixin:
>         def b():
>                 pass
>
> class B (iMixin,A):pass
>
> 然后结果就是
> class B中既有了A的成员,方法,又有了iMinin类的,
> 这样的话,这个所谓的mixin与C++等oo语言的多继承有什么不同呢?
>
这种看上去就是C++的多重继承。如果称之为mixin的话,我想原因是:

mixin的类本身是没有什么意义的,它必须与某个目标类结合才行,比如说直接使用目标类的属性,方法什么的,就是一些通用代码写成了类的型式。因此与独立功能的类有所区别。

>
> 另外,fred.li.1979.m.bj.prc at gmail.com的理解中
> 你执行
> newbie1().data_attribute = "com1"
> 之后newbie1类动态的改变了,但这对MixinBase有什么影响呢?
> 现在的MixinBase里面应该还是只是个 pass 吧?
> 类似的
> newbie2().method_attribute(1,2)
> 对MixinBase基类有什么影响啊??
> 看起来就是两继承了MixinBase的类,在运行时动态的改变了本身而已啊?
> 请教.....
>

上面的例子可能并不合适,Mixin更多的是对类起作用,而不是类的实例。

--
I like python!
My Blog: http://www.donews.net/limodou
NewEdit Maillist: http://groups.google.com/group/NewEdit

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号