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中的对象拷贝示例 python引用传递
Jan 23 Python
简单讲解Python中的闭包
Aug 11 Python
Python实现代码统计工具(终极篇)
Jul 04 Python
Python实现批量检测HTTP服务的状态
Oct 27 Python
Python实现将SQLite中的数据直接输出为CVS的方法示例
Jul 13 Python
TensorFlow神经网络优化策略学习
Mar 09 Python
python使用folium库绘制地图点击框
Sep 21 Python
Python二进制文件读取并转换为浮点数详解
Jun 25 Python
新手如何发布Python项目开源包过程详解
Jul 11 Python
python实现梯度法 python最速下降法
Mar 24 Python
如何基于python3和Vue实现AES数据加密
Mar 27 Python
什么是python的id函数
Jun 11 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
调整优化您的LAMP应用程序的5种简单方法
2011/06/26 PHP
PHP基础学习之流程控制的实现分析
2013/04/28 PHP
在PHP上显示JFreechart画的统计图方法
2013/11/03 PHP
php自动更新版权信息显示的方法
2015/06/19 PHP
Zend Framework+smarty用法实例详解
2016/03/19 PHP
php判断手机浏览还是web浏览,并执行相应的动作简单实例
2016/07/28 PHP
利用PHPStorm如何开发Laravel应用详解
2017/08/30 PHP
Javascript操作select方法大全[新增、修改、删除、选中、清空、判断存在等]
2008/09/26 Javascript
JSF中confirm弹出框的用法示例介绍
2014/01/07 Javascript
ubuntu下安装nodejs以及升级的办法
2015/05/08 NodeJs
javascript同步服务器时间和同步倒计时小技巧
2015/09/24 Javascript
JavaScript知识点总结(六)之JavaScript判断变量数据类型
2016/05/31 Javascript
一个Js文件函数中调用另一个Js文件函数的方法演示
2017/08/14 Javascript
Vue中引入样式文件的方法
2017/08/18 Javascript
Vue的实例、生命周期与Vue脚手架(vue-cli)实例详解
2017/12/27 Javascript
JS的函数调用栈stack size的计算方法
2018/06/24 Javascript
一次微信小程序内地图的使用实战记录
2019/09/09 Javascript
Vue中ref和$refs的介绍以及使用方法示例
2021/01/11 Vue.js
跟老齐学Python之使用Python查询更新数据库
2014/11/25 Python
Python中查看文件名和文件路径
2017/03/31 Python
Python实现的视频播放器功能完整示例
2018/02/01 Python
使用matlab或python将txt文件转为excel表格
2019/11/01 Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
2020/02/11 Python
浅谈Python3多线程之间的执行顺序问题
2020/05/02 Python
Python selenium实现断言3种方法解析
2020/09/08 Python
中职生自我鉴定范文
2013/10/03 职场文书
售后专员岗位职责
2013/12/08 职场文书
销售经理工作职责
2014/02/03 职场文书
妇女儿童发展规划实施方案
2014/03/16 职场文书
社会公德演讲稿
2014/05/20 职场文书
2014年小学语文工作总结
2014/12/20 职场文书
幼儿园六一主持词开场白
2015/05/28 职场文书
入党转正申请书范文
2019/05/20 职场文书
Mysql中where与on的区别及何时使用详析
2021/08/04 MySQL
Java中CyclicBarrier和CountDownLatch的用法与区别
2021/08/23 Java/Android
python中super()函数的理解与基本使用
2021/08/30 Python