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中asyncore的用法实例
Sep 29 Python
Python实现telnet服务器的方法
Jul 10 Python
解决Python 遍历字典时删除元素报异常的问题
Sep 11 Python
Python使用win32com实现的模拟浏览器功能示例
Jul 13 Python
Python3实现带附件的定时发送邮件功能
Dec 22 Python
Python实现的质因式分解算法示例
May 03 Python
Python实现求一个集合所有子集的示例
May 04 Python
python爬虫之爬取百度音乐的实现方法
Aug 24 Python
Python Django中间件,中间件函数,全局异常处理操作示例
Nov 08 Python
解决Python安装cryptography报错问题
Sep 03 Python
PyQt5结合matplotlib绘图的实现示例
Sep 15 Python
Django contrib auth authenticate函数源码解析
Nov 12 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使用GIFEncoder类生成gif动态滚动字幕
2014/07/01 PHP
PHP的运行机制与原理(底层)
2015/11/16 PHP
学习php设计模式 php实现装饰器模式(decorator)
2015/12/07 PHP
PHP的Yii框架中创建视图和渲染视图的方法详解
2016/03/29 PHP
PHP实现简易blog的制作
2016/10/24 PHP
网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)
2018/10/23 PHP
Yii框架通过请求组件处理get,post请求的方法分析
2019/09/03 PHP
jQuery使用手册之三 CSS操作
2007/03/24 Javascript
javascript中创建对象的三种常用方法
2010/12/30 Javascript
Jquery插件之打造自定义的select标签
2011/11/30 Javascript
jquery $.ajax相关用法分享
2012/03/16 Javascript
一款基于jQuery的图片场景标注提示弹窗特效
2015/01/05 Javascript
jQuery simplePage+AJAX plus分页插件用法实例
2016/02/17 Javascript
微信小程序实现皮肤功能(夜间模式)
2017/06/18 Javascript
Angular 4.x+Ionic3踩坑之Ionic 3.x界面传值详解
2018/03/13 Javascript
详解IOS微信上Vue单页面应用JSSDK签名失败解决方案
2018/11/14 Javascript
Node.js console控制台简单用法分析
2019/01/04 Javascript
详解vue配置后台接口方式
2019/03/29 Javascript
基于JS实现web端录音与播放功能
2019/04/17 Javascript
js实现盒子移动动画效果
2020/08/09 Javascript
使用pandas对两个dataframe进行join的实例
2018/06/08 Python
Python高级特性切片(Slice)操作详解
2018/09/27 Python
Python爬取商家联系电话以及各种数据的方法
2018/11/10 Python
python pytest进阶之xunit fixture详解
2019/06/27 Python
django项目简单调取百度翻译接口的方法
2019/08/06 Python
详解使用django-mama-cas快速搭建CAS服务的实现
2019/10/30 Python
Python模块的制作方法实例分析
2019/12/21 Python
python统计mysql数据量变化并调用接口告警的示例代码
2020/09/21 Python
HTML5实现分享到微信好友朋友圈QQ好友QQ空间微博二维码功能
2018/01/03 HTML / CSS
Smallable意大利家庭概念店:设计师童装及家居装饰
2018/01/08 全球购物
毕业生幼师求职自荐信
2013/10/01 职场文书
答谢会策划方案
2014/05/12 职场文书
企业文化理念标语
2014/06/10 职场文书
开展党的群众路线教育实践活动工作总结
2014/11/05 职场文书
2015年专项整治工作总结
2015/04/03 职场文书
市场督导岗位职责
2015/04/10 职场文书