Python里的元编程:控制产生的实例对象的特性以及实例.doc
《Python里的元编程:控制产生的实例对象的特性以及实例.doc》由会员分享,可在线阅读,更多相关《Python里的元编程:控制产生的实例对象的特性以及实例.doc(4页珍藏版)》请在三一文库上搜索。
1、Python里的元编程:控制产生的实例对象的特性以及实例很多人不理解“元编程”是个什么东西,关于它也没有一个十分准确的定义。这篇文章要说的是Python里的元编程,实际上也不一定就真的符合“元编程”的定义。只不过我无法找到一个更准确的名字来代表这篇文章的主题,所以就借了这么一个名号。副标题是控制你想控制的一切,实际上这篇文章讲的都是一个东西,利用Python提供给我们的特性,尽可能的使代码优雅简洁。具体而言,通过编程的方法,在更高的抽象层次上对一种层次的抽象的特性进行修改。首先说,Python中一切皆对象,老生常谈。还有,Python提供了许多特殊方法、元类等等这样的“元编程”机制。像给对象动
2、态添加属性方法之类的,在Python中根本谈不上是“元编程”,但在某些静态语言中却是需要一定技巧的东西。我们来谈些Python程序员也容易被搞糊涂的东西。我们先来把对象分分层次,通常我们知道一个对象有它的类型,老早以前Python就将类型也实现为对象。这样我们就有了实例对象和类对象。这是两个层次。稍有基础的读者就会知道还有元类这个东西的存在,简言之,元类就是“类”的“类”,也就是比类更高层次的东西。这又有了一个层次。还有吗?ImportTime vs RunTime如果我们换个角度,不用非得和之前的三个层次使用同样的标准。我们再来区分两个东西:ImportTime和RunTime,它们之间也并
3、非界限分明,顾名思义,就是两个时刻,导入时和运行时。当一个模块被导入时,会发生什么?在全局作用域的语句(非定义性语句)被执行。函数定义呢?一个函数对象被创建,但其中的代码不会被执行。类定义呢?一个类对象被创建,类定义域的代码被执行,类的方法中的代码自然也不会被执行。执行时呢?函数和方法中的代码会被执行。当然你要先调用它们。元类所以我们可以说元类和类是属于ImportTime的,import一个模块之后,它们就会被创建。实例对象属于RunTime,单import是不会创建实例对象的。不过话不能说的太绝对,因为如果你要是在模块作用域实例化类,实例对象也是会被创建的。只不过我们通常把它们写在函数里面
4、,所以这样划分。如果你想控制产生的实例对象的特性该怎么做?太简单了,在类定义中重写init方法。那么我们要控制类的一些性质呢?有这种需求吗?当然有!经典的单例模式,大家都知道有很多种实现方式。要求就是,一个类只能有一个实例。最简单的实现方法是这样的工厂模式,不太优雅。我们再来审视一下需求,要一个类只能有一个实例。我们在类中定义的方法都是实例对象的行为,那么要想改变类的行为,就需要更高层次的东西。元类在这个时候登场在合适不过了。前面说过,元类是类的类。也就是说,元类的init方法就是类的初始化方法。 我们知道还有call这个东西,它能让实例像函数那样被调用,那么元类的这个方法就是类在被实例化时调
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Python 编程 控制 产生 实例 对象 特性 以及
链接地址:https://www.31doc.com/p-3271975.html