Mix-in技术与分布类编程
日期:2007年6月1日 作者: 查看:[大字体 中字体 小字体]-
Mix-in技术与分布类编程
作者:limodou
大家一看到这个题目,看到“分布类编程”可能会认为是一种什么新技术,其实只不过是我个人所创,是指一个类的实现由多个文件(或模块)组成。至于它如何构成,有何作用,及相应的实例且听我慢慢道来。
Mix-in技术简介
关于Mix-in技术本人有专门的文章讲述,这里就不再赘述,而只进行简单地介绍。[1]
如果我们在运行时改变一个类的基类或类的方法、属性等就叫做Mix-in。那么它与类派生和重载有什么区别呢?根本的区别就是它的动态性。派生和重载是在程序运行前就已经对类进行了修改,它的改变是确切存在于某个文件中的,这种改变在运行时是稳定的。而Mix-in是在运行时才对相应的类发生作用,其运行时的表现与文件中所描述可能有所区别,而且随着运行环境的不同其表现也可以发生变化。另外,对于派生后的类,在运行时创建其一个实例就可以使用了。而使用Mix-in技术,我们需要将新的基类或方法先加入到原来的类中,然后再创建实例进行应用。
Mix-in技术的主要实现方法有两种:加入基类和加入方法。加入基类则相当于从基类进行派生,从而使原来的类具有基类的方法和属性。加入方法使来的类具有新的方法,如果存在加入的方法与原类中的某个方法同名,则新的方法将替换原来的方法(这个规则不是必然的,因为Mix-in的实现是你自已编写的,而不是固定不变的)。加入基类可以修改类的__bases__属性。加入方法可以使用内置函数getattr()和setattr()来实现。那么对于这种Mix-in技术在实现时还要考虑当新的方法与原方法重名的处理。
之所以会有这种伟大的Mix-in技术的存在,完全要得益于Python语言的动态性(当然可能不止一种语言能够实现这种技术),它允许你在运行时修改类所有的属性,也可以增加新的属性。通过setattr()我们就可以向一个类增加新的方法,并且使用它。
分布类的构成
类是对象的定义和描述,通过类我们就可以生成实例,即对象,用它进行处理。分布类,即表明类的定义不是一次性定义出来,而是分布在不同的文件或模块(以后我们就叫它们为分布类文件或分布类模块)中定义的。可能的一种类结构的分布如下:
+----原始类
+----基类1
+...
+----基类n
+----新功能1
+...
+----新功能2
+----Mix-in模块
上面的意思就是在一个目录下,有一个原始类,可能有n个基类模块,有n个新功能模块。最后为了实现Mix-in技术还需要一个Mix-in模块,而这个模块可以是你自已编写的。更复杂的结构可能是原始类下还有子目录,但处理方法都是一样的。
在进行基类与新功能的编程时要考虑重名方法的情况。在新功能模块中,方法定义应按照类的方法进行定义,即第一个参数应为对象实例参数,如self。
在运行时,应先使用Mix-in模块中的处理函数将基类与新功能加入到原始类中,然后再生成类的实例,进行使用。
大家可以看到,将类分成多个文件进行编程并不复杂,而Mix-in的处理是比较复杂的,应根据实际情况进行处理。
分布类的作用
为什么要使用分布类呢?就我个人来说,主要有以下的好处:
清晰。把一个类的不同功能分组放在不同的模块中,可以清晰地看出类的构成,容易理解,维护起来相对容易。我们在写程序时,可以将最核心的功能写在一个文件中,在其中定义类的属性,类的初始化,及一些最基本的功能。然后对于类的扩展,我们可以根据功能分组放到不同的文件中。这样使得每个文件所描述的功能相对集中,而不再是拥肿的代码。
灵活。如果我们的类的功能耦合性非常小,那么增加、卸载功能都是相当的容易,只要把相应的文件加入或去掉就可以了。在调试程序和定位错误时可能会很方便。如果我们想使某些功能有效,就加入相应的文件,反之,去掉相应的文件。如果发现有错误,可以通过一个文件一个文件地减少,从而进行一个文件一个文件地进行排除。
- [1] [2] [3] [4] 下一页
-
- Mix-in技术与分布类编程 相关文章:
- Mix-in技术与分布类编程 相关软件
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
上一篇:基于freetype/fontconfig/xft的汉化美化方
下一篇:常见端口表汇总
精品推荐
热点TOP10
- ·Linux学习手册
- ·在Linux 和FireWire上创建自己的RAC 集群
- ·Linux操作系统源代码详细分析
- ·linux知识大全
- ·Linux/Unix环境下的make命令详解
- ·RPM命令大全
- ·Linux From Scratch安装学习笔记
- ·在Linux下配置TCP/IP
- ·为CanonPIXMAiP1000喷墨打印机安装驱动程序
- ·常见端口表汇总
- ·Pure-FTPd + LDAP + MySQL + PGSQL + Virtual-Users + Quota How To
- ·LINUX 常见问题1000个详细解答
- ·万能声卡驱动(Alsa)的安装方法
- ·hdparm硬盘加速
- ·Linux管理工具介绍
- ·Linux发行版图标大全
- ·Linux中系统整体性能监控工具详细介绍
- ·长篇连载--arm linux演艺---序
- ·Bourne shell编程入门及脚本测试
- ·重安装gentoo 2005.1 for AMD64版经验
特别推荐
- ·Linux管理工具介绍
- ·Linux操作系统源代码详细分析
- ·Linux下用pptp连接VPN服务器
- ·在linux7.1上安装jdk+tomcat+oracle9i笔记
- ·Linux学习手册
- ·学习Linux的八点忠告
- ·深入分析Linux防火墙
- ·UNIX系统后门的安放和日志的擦除
- ·揭开Expect的神秘面纱
- ·万能声卡驱动(Alsa)的安装方法
- ·长篇连载--arm linux演艺---序
- ·为CanonPIXMAiP1000喷墨打印机安装驱动程序
- ·详细讲解Linux系统下ADSL拨号上网方法
- ·使用ImageMagick 的提示与技巧
- ·轻松实现 Linux系统下互联网过滤功能
- ·Linux下一些故障现象以及解决的相关资源
- ·重安装gentoo 2005.1 for AMD64版经验
- ·Linux/Unix环境下的make命令详解
- ·只需十分钟 Linux环境下快速搭建维基网站
- ·常见端口表汇总
