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多线程编程(五):死锁的形成
Apr 05 Python
python的random模块及加权随机算法的python实现方法
Jan 04 Python
Python进程间通信Queue实例解析
Jan 25 Python
Python3.6使用tesseract-ocr的正确方法
Oct 17 Python
在Mac上删除自己安装的Python方法
Oct 29 Python
Python魔法方法 容器部方法详解
Jan 02 Python
Python 2种方法求某个范围内的所有素数(质数)
Jan 31 Python
用Python生成HTML表格的方法示例
Mar 06 Python
Keras之自定义损失(loss)函数用法说明
Jun 10 Python
python实现测试工具(二)——简单的ui测试工具
Oct 19 Python
Spy++的使用方法及下载教程
Jan 29 Python
Python re.sub 反向引用的实现
Jul 07 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人民币金额转大写实例代码
2015/10/02 PHP
总结一些js自定义的函数
2006/08/05 Javascript
用 JSON 处理缓存
2007/04/27 Javascript
JavaScript中关于indexOf的使用方法与问题小结
2010/08/05 Javascript
jquery增加时编辑jqGrid(实例代码)
2013/11/08 Javascript
一行命令搞定node.js 版本升级
2014/07/20 Javascript
jQuery获取及设置表单input各种类型值的方法小结
2016/05/24 Javascript
关于 jQuery Easyui异步加载tree的问题解析
2016/12/06 Javascript
Angular如何引入第三方库的方法详解
2017/07/13 Javascript
js实现每日签到功能
2018/11/29 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
2019/02/22 Javascript
VUE脚手架具体使用方法
2019/05/20 Javascript
React生命周期原理与用法踩坑笔记
2020/04/28 Javascript
js代码实现轮播图
2020/05/04 Javascript
VUE和Antv G6实现在线拓扑图编辑操作
2020/10/28 Javascript
详解Vue3.0 + TypeScript + Vite初体验
2021/02/22 Vue.js
基于JavaScript实现随机点名器
2021/02/25 Javascript
python实现mysql的单引号字符串过滤方法
2015/11/14 Python
用 Python 连接 MySQL 的几种方式详解
2018/04/04 Python
详谈python3中用for循环删除列表中元素的坑
2018/04/19 Python
对numpy数据写入文件的方法讲解
2018/07/09 Python
利用python打开摄像头及颜色检测方法
2018/08/03 Python
Ubuntu下升级 python3.7.1流程备忘(推荐)
2018/12/10 Python
Django unittest 设置跳过某些case的方法
2018/12/26 Python
解决使用PyCharm时无法启动控制台的问题
2019/01/19 Python
与Django结合利用模型对上传图片预测的实例详解
2019/08/07 Python
关于Pytorch MaxUnpool2d中size操作方式
2020/01/03 Python
Python导入模块包原理及相关注意事项
2020/03/25 Python
详解pyinstaller生成exe的闪退问题解决方案
2020/06/19 Python
英国可持续奢侈品包包品牌:Elvis & Kresse
2018/08/05 全球购物
计算机专业毕业生推荐信
2013/11/25 职场文书
董事长秘书职责
2014/01/31 职场文书
孩子教育的心得体会
2014/09/01 职场文书
委托公证书样本
2015/01/23 职场文书
小学公民道德宣传日活动总结
2015/03/23 职场文书
java中如何截取字符串最后一位
2022/07/07 Java/Android