Python 元类使用说明


Posted in Python onDecember 18, 2009

我要一大群的类都具有一中特点,我怎么给他们加上呢?模板模板吗,我从这个模板创建一群类不就OK了?那就需要元类了。霍霍》

定义一个元类(就所一个类的模板!莫多想,还要记住这是类级别的,不是对象级别的!):

class MyMeta(type): 
def __init__(cls,name,bases,dic): 
print cls.__name__ 
print name 
def __str__(cls):return 'Beautiful class %s'%cls.__name__

这是个什么东西?哈,这是个元类。是个类的模板。

它要用在哪里?它要用在一个类里,作为这个类的模板。

起的什么作用?模板,就是提供一些共同的特征。

这个类提供了什么样的特征?两个特征,1。类定义后打印类的名字(__init__)。2。打印类的格式(__str__)。

到底回怎么工作,打开的你的解释器,输入以上的代码,上路:

输入:

class MyClass(object):
__metaclass__ = MyMeta

回车结束类的定义时,输出:
MyClass
MyClass

明白了吧,霍霍!事实证明它确实是初始化一个类,而不是一个对象!!!!!这个是第一个特征。

第二个:

输入:

print MyClass
输出:

Beautiful class MyClass

啊哈,恰如其分,如我们所预料的那样!!!!!!!!当然你可以任意个性化你的类!!

####################################################################################

下面我们来实现一个Singleton模式(来自啄木鸟社区):

Singleton元类:

class Singleton(type): 
def __init__(cls,name,bases,dic): 
super(Singleton,cls).__init__(name,bases,dic) 
cls.instance = None 
def __call__(cls,*args,**kwargs): 
if cls.instance is None: 
cls.instance = super(Singleton,cls).__call__(*args,**kwargs) 
return cls.instance

非常简单的一个设计模式,相信你能明白是怎么回事!
class MyClass(object): 
__metaclass__ = Singleton 
def __init__(self,arg): 
self.arg = arg

使用了Singleton元类的类。

是不是只能有一个实例呢??那只能看看了,邓爷爷说的好:实践是检验真理的唯一标准。——精华!!

>>> my1 = MyClass("hello") 
>>> my2 = MyClass("world") 
>>> my1 is my2 
True 
>>> my1.arg 
'hello' 
>>> my2.arg 
'hello'

我们创建my2的尝试失败了,而这恰恰证明我们成功了。

其实元类用的不多,理解理解。霍霍!!

Python 相关文章推荐
python分析nignx访问日志脚本分享
Feb 26 Python
python微信跳一跳系列之自动计算跳一跳距离
Feb 26 Python
Django中的文件的上传的几种方式
Jul 23 Python
python pyheatmap包绘制热力图
Nov 09 Python
pycharm 安装JPype的教程
Aug 08 Python
对Python获取屏幕截图的4种方法详解
Aug 27 Python
python中enumerate() 与zip()函数的使用比较实例分析
Sep 03 Python
浅析Python数字类型和字符串类型的内置方法
Dec 22 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
May 20 Python
python如何停止递归
Sep 09 Python
浅析Python中的套接字编程
Jun 22 Python
Python机器学习应用之工业蒸汽数据分析篇详解
Jan 18 Python
Python3 入门教程 简单但比较不错
Nov 29 #Python
Python2.5/2.6实用教程 入门基础篇
Nov 29 #Python
python 快速排序代码
Nov 23 #Python
python 文件和路径操作函数小结
Nov 23 #Python
Python+Django在windows下的开发环境配置图解
Nov 11 #Python
Python 开发Activex组件方法
Nov 08 #Python
Python 匹配任意字符(包括换行符)的正则表达式写法
Oct 29 #Python
You might like
php strtotime 函数UNIX时间戳
2009/01/14 PHP
php防止sql注入示例分析和几种常见攻击正则表达式
2014/01/12 PHP
CI框架在CLI下执行占用内存过大问题的解决方法
2014/06/17 PHP
Php连接及读取和写入mysql数据库的常用代码
2014/08/11 PHP
鼠标经过显示二级菜单js特效
2013/08/13 Javascript
解决JS中乘法的浮点错误的方法
2014/01/03 Javascript
JavaScript验证18位身份证号码最后一位正确性的实现代码
2014/08/07 Javascript
javascript实现控制浏览器全屏
2015/03/30 Javascript
jQuery选择器源码解读(五):tokenize的解析过程
2015/03/31 Javascript
详解JavaScript正则表达式中的global属性的使用
2015/06/16 Javascript
javascript实现五星评价代码(源码下载)
2015/08/11 Javascript
JavaScript中用let语句声明作用域的用法讲解
2016/05/20 Javascript
bootstrap daterangepicker汉化以及扩展功能
2017/06/15 Javascript
mpvue写一个CPASS小程序的示例
2018/09/04 Javascript
React Native开发封装Toast与加载Loading组件示例
2018/09/08 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
2018/10/19 Javascript
浅谈VUE防抖与节流的最佳解决方案(函数式组件)
2019/05/22 Javascript
在Python中使用判断语句和循环的教程
2015/04/25 Python
Python基于pygame模块播放MP3的方法示例
2017/09/30 Python
python使用logging模块发送邮件代码示例
2018/01/18 Python
对python3 urllib包与http包的使用详解
2018/05/10 Python
python如何从键盘获取输入实例
2020/06/18 Python
基于python requests selenium爬取excel vba过程解析
2020/08/12 Python
python实现数据结构中双向循环链表操作的示例
2020/10/09 Python
CSS3中的5个有趣的新技术
2009/04/02 HTML / CSS
美国知名男士服饰品牌:Brooks Brothers(布克兄弟)
2016/08/25 全球购物
英国排名第一的冲浪店:Ann’s Cottage
2020/06/21 全球购物
新加坡第一大健康与美容零售商:屈臣氏新加坡(Watsons Singapore)
2020/12/11 全球购物
行政经理岗位职责
2013/11/09 职场文书
外贸学院会计专业应届生求职信
2013/11/14 职场文书
《狮子和兔子》教学反思
2014/03/02 职场文书
报纸媒体创意广告词
2014/03/17 职场文书
乡镇综治宣传月活动总结
2014/07/02 职场文书
助人为乐道德模范事迹材料
2014/08/16 职场文书
地道战观后感
2015/06/04 职场文书
导游词之桂林山水
2019/09/20 职场文书