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两种遍历字典(dict)的方法比较
May 29 Python
Python科学画图代码分享
Nov 29 Python
利用Tkinter(python3.6)实现一个简单计算器
Dec 21 Python
Python加载带有注释的Json文件实例
May 23 Python
python的scikit-learn将特征转成one-hot特征的方法
Jul 10 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
Aug 29 Python
Python 中使用 PyMySQL模块操作数据库的方法
Nov 10 Python
python实现全排列代码(回溯、深度优先搜索)
Feb 26 Python
python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例
Feb 28 Python
学python最电脑配置有要求么
Jul 05 Python
Matlab中plot基本用法的具体使用
Jul 17 Python
Python3 pyecharts生成Html文件柱状图及折线图代码实例
Sep 29 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+Tidy-完美的XHTML纠错+过滤
2007/04/10 PHP
PHP基础学习之流程控制的实现分析
2013/04/28 PHP
在PHP中使用FastCGI解析漏洞及修复方案
2015/11/10 PHP
PHP使用PHPExcel删除Excel单元格指定列的方法
2016/07/06 PHP
JavaScript 更严格的相等 [译]
2012/09/20 Javascript
javascript 星级评分效果(手写)
2012/12/24 Javascript
jquery 倒计时效果实现秒杀思路
2013/09/11 Javascript
jQuery中attr()和prop()在修改checked属性时的区别
2014/07/18 Javascript
JQuery工具函数汇总
2015/06/15 Javascript
javascript实现简单的进度条
2015/07/02 Javascript
JavaScript提升性能的常用技巧总结【经典】
2016/06/20 Javascript
JS声明式函数与赋值式函数实例分析
2016/12/13 Javascript
详解用函数式编程对JavaScript进行断舍离
2017/09/18 Javascript
浅谈NodeJs之数据库异常处理
2017/10/25 NodeJs
小程序实现留言板
2018/11/02 Javascript
ES6 如何改变JS内置行为的代理与反射
2019/02/11 Javascript
JS定义函数的几种常用方法小结
2019/05/23 Javascript
利用JS代码自动删除稿件的普通弹幕功能
2019/09/20 Javascript
vue实现评价星星功能
2020/06/30 Javascript
python的urllib模块显示下载进度示例
2014/01/17 Python
KMP算法精解及其Python版的代码示例
2016/06/01 Python
Python PyQt5实现的简易计算器功能示例
2017/08/23 Python
django中send_mail功能实现详解
2018/02/06 Python
使用python快速在局域网内搭建http传输文件服务的方法
2019/11/14 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
2020/03/24 Python
利用keras使用神经网络预测销量操作
2020/07/07 Python
CSS3中Color的一些特性介绍
2012/05/27 HTML / CSS
美国一家主营日韩美妆护肤品的在线商店:iMomoko
2016/09/11 全球购物
施华洛世奇波兰官网:SWAROVSKI波兰
2019/06/18 全球购物
乌克兰在线药房:Аптека24
2019/10/30 全球购物
美国椅子和沙发制造商:La-Z-Boy
2020/10/25 全球购物
公司委托书格式范本
2014/09/16 职场文书
2015幼儿园新学期寄语
2015/02/27 职场文书
承兑汇票延期证明
2015/06/23 职场文书
gojs实现蚂蚁线动画效果
2022/02/18 Javascript
关于Mybatis中SQL节点的深入解析
2022/03/19 Java/Android