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通过floor函数舍弃小数位的方法
Mar 17 Python
粗略分析Python中的内存泄漏
Apr 23 Python
python从sqlite读取并显示数据的方法
May 08 Python
Python中列表的一些基本操作知识汇总
May 20 Python
基于Python实现通过微信搜索功能查看谁把你删除了
Jan 27 Python
python 不以科学计数法输出的方法
Jul 16 Python
windows下安装Python虚拟环境virtualenvwrapper-win
Jun 14 Python
让Python脚本暂停执行的几种方法(小结)
Jul 11 Python
在Python 的线程中运行协程的方法
Feb 24 Python
Python Django搭建网站流程图解
Jun 13 Python
MoviePy常用剪辑类及Python视频剪辑自动化
Dec 18 Python
Python绘制地图神器folium的新人入门指南
May 23 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正则表达式(regar expression)
2011/09/10 PHP
PHP 关于访问控制的和运算符优先级介绍
2013/07/08 PHP
php上传文件中文文件名乱码的解决方法
2013/11/01 PHP
php类的自动加载操作实例详解
2016/09/28 PHP
php和nginx交互实例讲解
2019/09/24 PHP
js 点击按钮弹出另一页,选择值后,返回到当前页
2010/05/26 Javascript
js下将阿拉伯数字每三位一逗号分隔(如:15000000转化为15,000,000)
2014/06/02 Javascript
javascript比较两个日期相差天数的方法
2015/07/23 Javascript
JavaScript数据库TaffyDB用法实例分析
2015/07/27 Javascript
使用AJAX实现Web页面进度条的实例分享
2016/05/06 Javascript
Bootstrap实现弹性搜索框
2016/07/11 Javascript
js判断用户是输入的地址请求的路径(实例讲解)
2017/07/18 Javascript
JS中利用swiper实现3d翻转幻灯片实例代码
2017/08/25 Javascript
Vue2.2.0+新特性整理及注意事项
2018/08/22 Javascript
JavaScript setInterval()与setTimeout()计时器
2019/12/27 Javascript
python实现根据图标提取分类应用程序实例
2014/09/28 Python
Python求导数的方法
2015/05/09 Python
利用python程序生成word和PDF文档的方法
2017/02/14 Python
Python基于csv模块实现读取与写入csv数据的方法
2018/01/18 Python
Python设计模式之状态模式原理与用法详解
2019/01/15 Python
linux环境下Django的安装配置详解
2019/07/22 Python
Python银行系统实战源码
2019/10/25 Python
Python 安装 virturalenv 虚拟环境的教程详解
2020/02/21 Python
Python读取多列数据以及用matplotlib制作图表方法实例
2020/09/23 Python
python实现文件+参数发送request的实例代码
2021/01/05 Python
html5时钟实现代码
2010/10/22 HTML / CSS
加拿大奢华时装品牌:Mackage
2018/01/10 全球购物
轻松制作精彩视频:Animoto
2018/09/19 全球购物
专业销售业务员求职信
2013/11/18 职场文书
超市端午节活动方案
2014/01/23 职场文书
支部书记四风对照材料
2014/08/28 职场文书
贷款承诺书
2015/01/20 职场文书
表扬信格式模板
2015/05/05 职场文书
卫生保健工作总结2015
2015/05/18 职场文书
详解CSS不定宽溢出文本适配滚动
2021/05/24 HTML / CSS
服务器SVN搭建图文安装过程
2022/06/21 Servers