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 相关文章推荐
Windows系统配置python脚本开机启动的3种方法分享
Mar 10 Python
python中的代码编码格式转换问题
Jun 10 Python
Python实现将绝对URL替换成相对URL的方法
Jun 28 Python
Python实现把数字转换成中文
Jun 29 Python
实例Python处理XML文件的方法
Aug 31 Python
python对html过滤处理的方法
Oct 21 Python
python使用socket 先读取长度,在读取报文内容示例
Sep 26 Python
Python通过fnmatch模块实现文件名匹配
Sep 30 Python
python实现简单猜单词游戏
Dec 24 Python
python中zip()函数遍历多个列表方法
Feb 18 Python
PyQt QMainWindow的使用示例
Mar 24 Python
Matplotlib可视化之添加让统计图变得简单易懂的注释
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
造就帕卡马拉的帕卡斯是怎么被发现的
2021/03/03 咖啡文化
DISCUZ 分页代码
2007/01/02 PHP
php的正则处理函数总结分析
2008/06/20 PHP
网页游戏开发入门教程三(简单程序应用)
2009/11/02 PHP
PHP连接sql server 2005环境配置及问题解决
2014/08/08 PHP
PHP实现上传多文件示例代码
2017/02/20 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
用jQuery实现检测浏览器及版本的脚本代码
2008/01/22 Javascript
jQuery 剧场版 你必须知道的javascript
2009/05/27 Javascript
推荐17个优美新鲜的jQuery的工具提示插件
2012/09/14 Javascript
jQuery中校验时间格式的正则表达式小结
2013/09/22 Javascript
删除javascript所创建子节点的方法
2015/05/21 Javascript
javascript的 {} 语句块详解
2016/02/27 Javascript
js中获取时间new Date()的全面介绍
2016/06/20 Javascript
Bootstrap Table使用心得总结
2016/11/29 Javascript
js推箱子小游戏步骤代码解析
2018/01/10 Javascript
Vue.js进阶知识点总结
2018/04/01 Javascript
Vue项目部署在Spring Boot出现页面空白问题的解决方案
2018/11/26 Javascript
Vue项目总结之webpack常规打包优化方案
2019/06/06 Javascript
axios实现简单文件上传功能
2019/09/25 Javascript
[00:36]DOTA2上海特级锦标赛 Alliance战队宣传片
2016/03/04 DOTA
python 动态获取当前运行的类名和函数名的方法
2014/04/15 Python
Python设置Socket代理及实现远程摄像头控制的例子
2015/11/13 Python
详解Python import方法引入模块的实例
2017/08/02 Python
详解Python中pandas的安装操作说明(傻瓜版)
2019/04/08 Python
Python交互式图形编程的实现
2019/07/25 Python
python3字符串输出常见面试题总结
2020/12/01 Python
Under Armour安德玛荷兰官网:美国高端运动科技品牌
2019/07/10 全球购物
HolidayLettings英国:预订最好的度假公寓、别墅和自助式住宿
2019/08/27 全球购物
大学生职业生涯规划范文——找准自我,定位人生
2014/01/23 职场文书
在校大学生个人的自我评价
2014/02/13 职场文书
幼儿教师国培感言
2014/02/19 职场文书
英语教学随笔感言
2014/02/20 职场文书
幼儿园教师工作总结2015
2015/04/02 职场文书
简短的人生哲理(38句)
2019/08/13 职场文书
Python中的 No Module named ***问题及解决
2022/07/23 Python