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语言技巧之三元运算符使用介绍
Mar 04 Python
python基于xml parse实现解析cdatasection数据
Sep 30 Python
python开发中range()函数用法实例分析
Nov 12 Python
简单实现python收发邮件功能
Jan 05 Python
Win7 64位下python3.6.5安装配置图文教程
Oct 27 Python
Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能
Nov 23 Python
django数据库自动重连的方法实例
Jul 21 Python
python3实现微型的web服务器
Sep 03 Python
浅谈sklearn中predict与predict_proba区别
Jun 28 Python
python如何实时获取tcpdump输出
Sep 16 Python
Python Spyder 调出缩进对齐线的操作
Feb 26 Python
python和opencv构建运动检测器的实现
Mar 03 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基于GD库画五星红旗的方法
2015/02/24 PHP
PHP使用Pthread实现的多线程操作实例
2015/11/14 PHP
详解PHP中cookie和session的区别及cookie和session用法小结
2016/06/12 PHP
css3实现背景模糊的三种方式
2021/03/09 HTML / CSS
Mozilla中显示textarea中选择的文字
2006/09/07 Javascript
List the UTC Time on a Computer
2007/06/11 Javascript
js常用代码段整理
2011/11/30 Javascript
得到form下的所有的input的js代码
2013/11/07 Javascript
javascript中var的重要性分析
2015/02/11 Javascript
JavaScript更改字符串的大小写
2015/05/07 Javascript
使用Node.js处理前端代码文件的编码问题
2016/02/16 Javascript
实例剖析AngularJS框架中数据的双向绑定运用
2016/03/04 Javascript
微信小程序之小豆瓣图书实例
2016/11/30 Javascript
详解windows下vue-cli及webpack 构建网站(二)导入bootstrap样式
2017/06/17 Javascript
vue中设置height:100%无效的问题及解决方法
2018/07/27 Javascript
js+audio实现音乐播放器
2020/09/13 Javascript
[01:05:00]2018国际邀请赛 表演赛 Pain vs OpenAI
2018/08/24 DOTA
图文讲解选择排序算法的原理及在Python中的实现
2016/05/04 Python
简单了解python PEP的一些知识
2019/07/13 Python
Python简易版停车管理系统
2019/08/12 Python
解决Django layui {{}}冲突的问题
2019/08/29 Python
django序列化时使用外键的真实值操作
2020/07/15 Python
Python 生成短8位唯一id实战教程
2021/01/13 Python
HTML5 Canvas概述
2009/08/26 HTML / CSS
美国女士内衣在线折扣商店:One Hanes Place
2019/03/24 全球购物
英国现代市场:ARKET
2019/04/10 全球购物
应届护士推荐信
2013/11/16 职场文书
给朋友的道歉信
2014/01/09 职场文书
幼儿园大班毕业感言
2014/02/06 职场文书
幼儿园中班教学反思
2014/02/10 职场文书
先进集体事迹材料
2014/02/17 职场文书
大班开学家长寄语
2014/04/04 职场文书
工作骂脏话检讨书
2014/10/05 职场文书
出国留学单位推荐信
2015/03/26 职场文书
格列夫游记读书笔记
2015/07/01 职场文书
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/07 PostgreSQL