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运行效率
Jun 09 Python
pandas按若干个列的组合条件筛选数据的方法
Apr 11 Python
Flask Web开发入门之文件上传(八)
Aug 17 Python
Win10下python 2.7.13 安装配置方法图文教程
Sep 18 Python
PyCharm的设置方法和第一个Python程序的建立
Jan 16 Python
Flask使用Pyecharts在单个页面展示多个图表的方法
Aug 05 Python
windows 10 设定计划任务自动执行 python 脚本的方法
Sep 11 Python
Tensorflow: 从checkpoint文件中读取tensor方式
Feb 10 Python
Python日志logging模块功能与用法详解
Apr 09 Python
Spring http服务远程调用实现过程解析
Jun 11 Python
基于matplotlib中ion()和ioff()的使用详解
Jun 16 Python
详解Go语言运用广度优先搜索走迷宫
Jun 23 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/02 无线电
PHP 和 MySQL 基础教程(三)
2006/10/09 PHP
php 小乘法表实现代码
2009/07/16 PHP
php arsort 数组降序排序详细介绍
2016/11/17 PHP
laravel 自定义常量的两种方案
2019/10/14 PHP
PHP变量的作用范围实例讲解
2020/12/22 PHP
jquery根据name属性查找的小例子
2013/11/21 Javascript
jquery选择器之基本过滤选择器详解
2014/01/27 Javascript
jQuery实现瀑布流的取巧做法分享
2015/01/12 Javascript
jQuery使用fadeout实现元素渐隐效果的方法
2015/03/27 Javascript
浅谈Node.js:理解stream
2016/12/08 Javascript
jQuery使用ajax方法解析返回的json数据功能示例
2017/01/10 Javascript
使用JavaScript判断用户输入的是否为正整数(两种方法)
2017/02/05 Javascript
Bootstrap路径导航与分页学习使用
2017/02/08 Javascript
angular中使用Socket.io实例代码
2017/06/03 Javascript
element el-input directive数字进行控制
2018/10/11 Javascript
微信小程序实现顶部下拉菜单栏
2018/11/04 Javascript
微信小程序使用map组件实现获取定位城市天气或者指定城市天气数据功能
2019/01/22 Javascript
Vuejs学习笔记之使用指令v-model完成表单的数据双向绑定
2019/04/29 Javascript
[43:24]VG vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
DJANGO-ALLAUTH社交用户系统的安装配置
2014/11/18 Python
django中send_mail功能实现详解
2018/02/06 Python
Python中判断输入是否为数字的实现代码
2018/05/26 Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
2018/10/29 Python
python读取xlsx的方法
2018/12/25 Python
Python如何使用字符打印照片
2020/01/03 Python
如何利用find命令查找文件
2015/02/07 面试题
商场经理竞聘演讲稿
2014/01/01 职场文书
实习协议书范本
2014/04/22 职场文书
2015年世界卫生日活动总结
2015/02/09 职场文书
2015年个人招商工作总结
2015/04/25 职场文书
撤诉申请怎么写
2015/05/19 职场文书
《清澈的湖水》教学反思
2016/02/17 职场文书
MySQL Router实现MySQL的读写分离的方法
2021/05/27 MySQL
Python实现的扫码工具居然这么好用!
2021/06/07 Python
CentOS7和8下安装Maven3.8.4
2022/04/07 Servers