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中将函数赋值给变量时需要注意的一些问题
Aug 18 Python
python操作xlsx文件的包openpyxl实例
May 03 Python
Python并发之多进程的方法实例代码
Aug 15 Python
Python 限制线程的最大数量的方法(Semaphore)
Feb 22 Python
python 列表转为字典的两个小方法(小结)
Jun 28 Python
python调试神器PySnooper的使用
Jul 03 Python
Python Django Cookie 简单用法解析
Aug 13 Python
tensorflow常用函数API介绍
Apr 19 Python
TensorFlow使用Graph的基本操作的实现
Apr 22 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
Jun 03 Python
python如何删除文件、目录
Jun 23 Python
python实现杨辉三角的几种方法代码实例
Mar 02 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 pthreads多线程的安装与使用
2016/01/19 PHP
深入了解javascript中的prototype与继承
2013/04/14 Javascript
javascript获取URL参数与参数值的示例代码
2013/12/20 Javascript
JS+JSP checkBox 全选具体实现
2014/01/02 Javascript
改变隐藏的input中value值的方法
2014/03/19 Javascript
node.js操作mongoDB数据库示例分享
2014/11/26 Javascript
JavaScript数组Array对象增加和删除元素方法总结
2015/01/20 Javascript
jQuery实现网页抖动的菜单抖动效果
2015/08/07 Javascript
基于jQuery实现左右图片轮播(原理通用)
2015/12/24 Javascript
JQuery ztree 异步加载实例讲解
2016/02/25 Javascript
JS判断图片是否加载完成方法汇总(最新版)
2016/05/13 Javascript
Bootstrap3多级下拉菜单
2017/02/24 Javascript
详解在Vue中通过自定义指令获取dom元素
2017/03/04 Javascript
微信通过页面(H5)直接打开本地app的解决方法
2017/09/09 Javascript
jQuery基于cookie实现换肤功能实例
2017/10/14 jQuery
vue 文件目录结构详解
2017/11/24 Javascript
JS中判断字符串存在和非空的方法
2018/09/12 Javascript
[01:33:07]VGJ.T vs Newbee Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
Python新手入门最容易犯的错误总结
2017/04/24 Python
Python操作redis实例小结【String、Hash、List、Set等】
2019/05/16 Python
python之当你发现QTimer不能用时的解决方法
2019/06/21 Python
使用Python做垃圾分类的原理及实例代码附源码
2019/07/02 Python
Python破解BiliBili滑块验证码的思路详解(完美避开人机识别)
2020/02/17 Python
Python包和模块的分发详细介绍
2020/06/19 Python
Django如何批量创建Model
2020/09/01 Python
python Cartopy的基础使用详解
2020/11/01 Python
python连接mongodb数据库操作数据示例
2020/11/30 Python
美国中西部家用医疗设备商店:Med Mart(轮椅、踏板车、升降机等)
2019/04/26 全球购物
JD Sports丹麦:英国领先的运动时尚零售商
2020/11/24 全球购物
护理专业大学生自我推荐信
2014/01/25 职场文书
企业法人授权委托书
2014/04/03 职场文书
我爱我家教学反思
2014/05/01 职场文书
通知范文怎么写
2015/04/16 职场文书
十二生肖观后感
2015/06/12 职场文书
2016年教师节特级教师获奖感言
2015/12/09 职场文书
2019公司借款合同范本2篇!
2019/07/24 职场文书