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 相关文章推荐
初步剖析C语言编程中的结构体
Jan 16 Python
Python教程之全局变量用法
Jun 27 Python
python win32 简单操作方法
May 25 Python
详解python之多进程和进程池(Processing库)
Jun 09 Python
python实现感知器
Dec 19 Python
python读取有密码的zip压缩文件实例
Feb 08 Python
利用PyCharm Profile分析异步爬虫效率详解
May 08 Python
python基于paramiko将文件上传到服务器代码实现
Jul 08 Python
Python基本语法之运算符功能与用法详解
Oct 22 Python
python实现百度OCR图片识别过程解析
Jan 17 Python
通过实例了解Python str()和repr()的区别
Jan 17 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
Oct 21 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截取中文字符串的问题
2006/07/12 PHP
jQuery 源码分析笔记
2011/05/25 PHP
PHP实现大数(浮点数)取余的方法
2017/02/18 PHP
PHP 中使用ajax时一些常见错误总结整理
2017/02/27 PHP
PHP实现函数内修改外部变量值的方法示例
2018/12/28 PHP
PHP实用小技巧之调用录像的方法
2019/12/05 PHP
JavaScript中常见陷阱小结
2010/04/27 Javascript
javascript面向对象包装类Class封装类库剖析
2013/01/24 Javascript
当jQuery1.7遇上focus方法的问题
2014/01/26 Javascript
基于zepto.js实现仿手机QQ空间的大图查看组件ImageView.js详解
2015/03/05 Javascript
javascript实现2016新年版日历
2016/01/25 Javascript
JS实现添加,替换,删除节点元素的方法
2016/06/30 Javascript
JS正则截取两个字符串之间及字符串前后内容的方法
2017/01/06 Javascript
原生JS实现N级菜单的代码
2017/05/21 Javascript
详解微信小程序 通过控制CSS实现view隐藏与显示
2017/05/24 Javascript
jQuery实现遍历XML节点和属性的方法示例
2018/04/29 jQuery
javascript中数组的常用算法深入分析
2019/03/12 Javascript
JS使用正则表达式提交页面验证的代码
2019/10/16 Javascript
微信小程序地图绘制线段并且测量(实例代码)
2020/01/02 Javascript
Jquery如何使用animation动画效果改变背景色的代码
2020/07/20 jQuery
python中ConfigParse模块的用法
2014/09/29 Python
linux环境下的python安装过程图解(含setuptools)
2017/11/22 Python
python 函数的缺省参数使用注意事项分析
2019/09/17 Python
keras分类模型中的输入数据与标签的维度实例
2020/07/03 Python
使用css3制作登录表单的步骤
2014/04/07 HTML / CSS
final, finally, finalize的区别
2012/03/01 面试题
质检部岗位职责
2013/11/11 职场文书
村道德模范事迹材料
2014/08/28 职场文书
个人遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
个人四风问题对照检查材料思想汇报
2014/10/06 职场文书
2015年业务工作总结范文
2015/04/10 职场文书
2015年社区科普工作总结
2015/05/13 职场文书
学习社交礼仪心得体会
2016/01/22 职场文书
大学生如何逃脱“毕业季创业队即散伙”魔咒?
2019/08/19 职场文书
AI:如何训练机器学习的模型
2021/04/16 Python
mysql 数据插入优化方法之concurrent_insert
2021/07/01 MySQL