python中元类用法实例


Posted in Python onOctober 10, 2014

本文实例讲述了python中元类用法,分享给大家供大家参考。具体方法分析如下:

1.元类(metaclass)是用来创建类的类

2.type(object):返回一个对象的类型,与object.__class__的值相同,type(name,bases,dict):创建一个新的type类型,name就是新class的name,值存到__name__属性中,bases是tuple类型,值会存到__bases__中,dict的值存到__dict__中

class X:

...     a = 1

...

X = type('X', (object,), dict(a=1))

3.类默认是用type()创建的,通过定义类时指定metaclass参数或继承自某个类,而该类指定了metaclass参数,可以自定义类的创建过程

class OrderedClass(type):

     #该方法返回值就是__new__的namespace参数,如果没有该方法namespace的值就是dict()

     @classmethod

     def __prepare__(metacls, name, bases, **kwds):

        return collections.OrderedDict()

     #namespace就是class的__dict__,这个dict类型的对象已经被填充了相应的值

     def __new__(cls, name, bases, namespace, **kwds):

        result = type.__new__(cls, name, bases, dict(namespace))

        result.members = tuple(namespace)

        return result
class A(metaclass=OrderedClass):

    def one(self): pass

    def two(self): pass

    def three(self): pass

    def four(self): pass

print(A.members)

#('__module__', '__qualname__', 'one', 'two', 'three', 'four')

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
复习Python中的字符串知识点
Apr 14 Python
Python实现文件复制删除
Apr 19 Python
尝试用最短的Python代码来实现服务器和代理服务器
Jun 23 Python
Python实现字符串与数组相互转换功能示例
Sep 22 Python
Python数据结构之哈夫曼树定义与使用方法示例
Apr 22 Python
Pycharm 设置自定义背景颜色的图文教程
May 23 Python
Python利用ORM控制MongoDB(MongoEngine)的步骤全纪录
Sep 13 Python
编写多线程Python服务器 最适合基础
Sep 14 Python
python使用pip安装SciPy、SymPy、matplotlib教程
Nov 20 Python
python实现发送带附件的邮件代码分享
Sep 22 Python
Python常用扩展插件使用教程解析
Nov 02 Python
如何在scrapy中集成selenium爬取网页的方法
Nov 18 Python
跟老齐学Python之总结参数的传递
Oct 10 #Python
跟老齐学Python之变量和参数
Oct 10 #Python
跟老齐学Python之重回函数
Oct 10 #Python
跟老齐学Python之Python文档
Oct 10 #Python
跟老齐学Python之大话题小函数(2)
Oct 10 #Python
跟老齐学Python之大话题小函数(1)
Oct 10 #Python
Python警察与小偷的实现之一客户端与服务端通信实例
Oct 09 #Python
You might like
Window下PHP三种运行方式图文详解
2013/06/11 PHP
PHP解密Unicode及Escape加密字符串
2015/05/17 PHP
php发送html格式文本邮件的方法
2015/06/10 PHP
PHP+JQuery+Ajax实现分页方法详解
2016/08/06 PHP
php 使用redis锁限制并发访问类示例
2016/11/02 PHP
跨浏览器的设置innerHTML方法
2006/09/18 Javascript
iframe 自适应高度[在IE6 IE7 FF下测试通过]
2009/04/13 Javascript
基于jQuery实现的水平和垂直居中的div窗口
2011/08/08 Javascript
仿jQuery的siblings效果的js代码
2011/08/09 Javascript
使用jQuery清空file文件域的解决方案
2013/04/12 Javascript
jquery取子节点及当前节点属性值的方法
2014/09/09 Javascript
JavaScript中利用jQuery绑定事件的几种方式小结
2016/03/06 Javascript
JavaScript必知必会(九)function 说起 闭包问题
2016/06/08 Javascript
jQuery基于排序功能实现上移、下移的方法
2016/11/26 Javascript
jQuery删除当前节点元素
2016/12/07 Javascript
深入理解 JavaScript 中的 JSON
2017/04/06 Javascript
解决IE7中使用jQuery动态操作name问题
2017/08/28 jQuery
jQuery中.attr()和.data()的区别分析
2017/09/03 jQuery
JavaScript图像放大镜效果实现方法详解
2020/06/28 Javascript
详解Vue的组件中data选项为什么必须是函数
2020/08/17 Javascript
Python遍历目录中的所有文件的方法
2016/07/08 Python
基于python实现KNN分类算法
2020/04/23 Python
Python实现微信消息防撤回功能的实例代码
2019/04/29 Python
利用pyshp包给shapefile文件添加字段的实例
2019/12/06 Python
Python线程协作threading.Condition实现过程解析
2020/03/12 Python
python 利用Pyinstaller打包Web项目
2020/10/23 Python
PyCharm最新激活码(2020/10/27全网最新)
2020/10/27 Python
HTML5 的新的表单元素(datalist/keygen/output)使用介绍
2013/07/19 HTML / CSS
皇马官方商城:Real Madrid Store
2016/09/02 全球购物
小学生班会演讲稿
2014/01/09 职场文书
美术第二课堂活动总结
2014/07/08 职场文书
2015小学新教师个人工作总结
2015/10/14 职场文书
2016大学生入党积极分子心得体会
2016/01/06 职场文书
Vue实现tab导航栏并支持左右滑动功能
2021/06/28 Vue.js
Python内置数据结构列表与元组示例详解
2021/08/04 Python
Java 常见的限流算法详细分析并实现
2022/04/07 Java/Android