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编写一个国际象棋AI程序
Nov 28 Python
Python安装第三方库的3种方法
Jun 21 Python
Python中字符串的格式化方法小结
May 03 Python
利用Python破解斗地主残局详解
Jun 30 Python
关于Python正则表达式 findall函数问题详解
Mar 22 Python
Python获取昨天、今天、明天开始、结束时间戳的方法
Jun 01 Python
pandas 选取行和列数据的方法详解
Aug 08 Python
Python发送邮件的实例代码讲解
Oct 16 Python
Python函数式编程指南:对生成器全面讲解
Nov 19 Python
Python面向对象程序设计之私有变量,私有方法原理与用法分析
Mar 23 Python
Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解
Mar 30 Python
python中scipy.stats产生随机数实例讲解
Feb 19 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导入excel文件到mysql数据库的方法
2015/01/14 PHP
Yii统计不同类型邮箱数量的方法
2016/10/18 PHP
php实现简单加入购物车功能
2017/03/07 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
JavaScript 开发规范要求(图文并茂)
2010/06/11 Javascript
浅谈javascript的原型继承
2012/07/25 Javascript
JavaScript中判断页面关闭、页面刷新的实现代码
2014/08/27 Javascript
JS打开新窗口防止被浏览器阻止的方法
2015/01/03 Javascript
javascript制作照片墙及制作过程中出现的问题
2016/04/04 Javascript
zTree实现节点修改的实时刷新功能
2017/03/20 Javascript
Bootstrap响应式导航由768px变成992px的实现代码
2017/06/15 Javascript
解决React Native端口号修改的方法
2017/07/28 Javascript
vue2.0s中eventBus实现兄弟组件通信的示例代码
2017/10/25 Javascript
vue后台管理之动态加载路由的方法
2018/08/13 Javascript
微信小程序textarea层级过高(盖住其他元素)问题的解决办法
2019/03/04 Javascript
原生JS与CSS实现软件卸载对话框功能
2019/12/05 Javascript
Js Snowflake(雪花算法)生成随机ID的实现方法
2020/08/26 Javascript
[09:22]2014DOTA2西雅图国际邀请赛 主赛事第二日TOPPLAY
2014/07/21 DOTA
[16:19]教你分分钟做大人——风暴之灵
2015/03/11 DOTA
python基础教程之自定义函数介绍
2014/08/29 Python
python中__slots__用法实例
2015/06/04 Python
Python循环语句中else的用法总结
2016/09/11 Python
django传值给模板, 再用JS接收并进行操作的实例
2018/05/28 Python
python实现烟花小程序
2019/01/30 Python
opencv导入头文件时报错#include的解决方法
2019/07/31 Python
解决pytorch GPU 计算过程中出现内存耗尽的问题
2019/08/19 Python
pytorch:torch.mm()和torch.matmul()的使用
2019/12/27 Python
python实现横向拼接图片
2020/03/23 Python
python3的pip路径在哪
2020/06/23 Python
Python  Asyncio模块实现的生产消费者模型的方法
2021/03/01 Python
JD Sports意大利:英国篮球和运动时尚的领导者
2017/10/29 全球购物
电气工程及其自动化学生实习自我鉴定
2013/09/19 职场文书
庆六一活动总结
2014/08/29 职场文书
2014大四本科生自我鉴定总结
2014/10/04 职场文书
实习报告范文
2019/07/30 职场文书
pdf论文中python画的图Type 3 fonts字体不兼容的解决方案
2021/04/24 Python