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多线程编程简单介绍
Apr 13 Python
Python实现遍历目录的方法【测试可用】
Mar 22 Python
Python实现的求解最大公约数算法示例
May 03 Python
python和shell获取文本内容的方法
Jun 05 Python
Python/ArcPy遍历指定目录中的MDB文件方法
Oct 27 Python
python爬虫之验证码篇3-滑动验证码识别技术
Apr 11 Python
Flask框架单例模式实现方法详解
Jul 31 Python
Python测试模块doctest使用解析
Aug 10 Python
python 三元运算符使用解析
Sep 16 Python
Python实现Wordcloud生成词云图的示例
Mar 30 Python
python3读取autocad图形文件.py实例
Jun 05 Python
Python自带的IDE在哪里
Jul 01 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模板页面中分页代码的解析
2009/02/06 PHP
PHP中文件上传的一个问题
2010/09/04 PHP
PHP数组操作类实例
2015/07/11 PHP
基于php实现随机合并数组并排序(原排序)
2015/11/26 PHP
CodeIgniter分页类pagination使用方法示例
2016/03/28 PHP
浅谈PHP eval()函数定义和用法
2016/06/21 PHP
简单解析PHP程序的运行流程
2016/06/23 PHP
PHP搭建大文件切割分块上传功能示例
2017/01/04 PHP
php读取XML的常见方法实例总结
2017/04/25 PHP
php实现socket推送技术的示例
2017/12/20 PHP
javascript获取ckeditor编辑器的值(实现代码)
2013/11/18 Javascript
Javascript堆排序算法详解
2014/12/03 Javascript
基于javascript实现页面加载loading效果
2020/09/15 Javascript
Bootstrap源码解读表单(2)
2016/12/22 Javascript
Vue中添加过渡效果的方法
2017/03/16 Javascript
基于JavaScript实现选项卡效果
2017/07/21 Javascript
ES6知识点整理之函数对象参数默认值及其解构应用示例
2019/04/17 Javascript
Vue注册组件命名时不能用大写的原因浅析
2019/04/25 Javascript
JS实现的对象去重功能示例
2019/06/04 Javascript
Angular6项目打包优化的实现方法
2019/12/15 Javascript
跟老齐学Python之有容乃大的list(3)
2014/09/15 Python
python中装饰器级连的使用方法示例
2017/09/29 Python
Python实现的读写json文件功能示例
2018/06/05 Python
Django框架实现分页显示内容的方法详解
2019/05/10 Python
TensorFlow设置日志级别的几种方式小结
2020/02/04 Python
Spring http服务远程调用实现过程解析
2020/06/11 Python
简单了解如何封装自己的Python包
2020/07/08 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
2020/07/14 Python
Python远程linux执行命令实现
2020/11/11 Python
python反扒机制的5种解决方法
2021/02/06 Python
应届生新闻编辑求职信
2013/11/19 职场文书
客房主管岗位职责
2013/12/09 职场文书
《两个铁球同时着地》教学反思
2014/02/13 职场文书
2014年文学毕业生自我鉴定
2014/04/23 职场文书
2015年妇联工作总结范文
2015/04/22 职场文书
2019通用版新员工入职培训方案!
2019/07/11 职场文书