含有章节索引的中文 文章模板

-- limodou [DateTime(2004-08-15T21:13:08Z)] TableOfContents

Mix-in技术与分布类编程

本文利用Mixin技术实现了如何将一个类以分布的形式进行编程。非常适用于不断渐近的开发过程,等产品成熟稳定后,可以考虑合并为一个完整的类。这是一个Mixin技术具体应用的例子。

大家一看到这个题目,看到“分布类编程”可能会认为是一种什么新技术,其实只不过是我个人所创,是指一个类的实现由多个文件(或模块)组成。至于它如何构成,有何作用,及相应的实例且听我慢慢道来。

Mix-in技术简介

关于Mix-in技术本人有专门的文章讲述,这里就不再赘述,而只进行简单地介绍。

如果我们在运行时改变一个类的基类或类的方法、属性等就叫做Mix-in。那么它与类派生和重载有什么区别呢?根本的区别就是它的动态性。派生和重载是在程序运行前就已经对类进行了修改,它的改变是确切存在于某个文件中的,这种改变在运行时是稳定的。而Mix-in是在运行时才对相应的类发生作用,其运行时的表现与文件中所描述可能有所区别,而且随着运行环境的不同其表现也可以发生变化。另外,对于派生后的类,在运行时创建其一个实例就可以使用了。而使用Mix-in技术,我们需要将新的基类或方法先加入到原来的类中,然后再创建实例进行应用。

Mix-in技术的主要实现方法有两种:加入基类和加入方法。加入基类则相当于从基类进行派生,从而使原来的类具有基类的方法和属性。加入方法使来的类具有新的方法,如果存在加入的方法与原类中的某个方法同名,则新的方法将替换原来的方法(这个规则不是必然的,因为Mix-in的实现是你自已编写的,而不是固定不变的)。加入基类可以修改类的__bases__属性。加入方法可以使用内置函数getattr()和setattr()来实现。那么对于这种Mix-in技术在实现时还要考虑当新的方法与原方法重名的处理。

之所以会有这种伟大的Mix-in技术的存在,完全要得益于Python语言的动态性(当然可能不止一种语言能够实现这种技术),它允许你在运行时修改类所有的属性,也可以增加新的属性。通过setattr()我们就可以向一个类增加新的方法,并且使用它。