python中的元类(metaclass)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python中的元类(metaclass),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1865字,纯文字阅读大概需要3分钟。
内容图文
![python中的元类(metaclass)](/upload/InfoBanner/zyjiaocheng/1132/5943eec6233b449eaf12a3592aba49a7.jpg)
认识python中元类的准备工作。
1,首先需要明白一个概念就是python中一切皆为对象。
input: class Trick(object): pass print type(‘1234‘) print type(1234) print type(Trick()) output: <type ‘str‘> <type ‘int‘> <class‘__main__.Trick‘>
2,什么是新式类,旧式类
知乎上的这篇文章个人表示不错,言简意赅:https://www.zhihu.com/question/22475395
1)首先,写法不一样:
class A: pass class B(object): pass
2)在多继承中,新式类采用广度优先搜索,而旧式类是采用深度优先搜索。
3)新式类更符合OOP编程思想,统一了python中的类型机制。
3,type(类名, 父类的元组(针对继承的情况,可以为空),包含属性的字典(名称和值)) 例子:type(‘trick‘, (), {})
下面开始进入主题:什么是元类
元类就是创建类的类,心里话工作中确实没有用到过,可能因为没有用到过才在想什么是元类,真的用到过可能不会再问为什么会有元类。
在stackoverflow看到的例子粘贴过来
函数做元类传递给类
input: def upper_attr(class_name, class_parents, class_attr): """ 返回一个对象,将属性都改为大写的形式 :param class_name: 类的名称 :param class_parents: 类的父类tuple :param class_attr: 类的参数 :return: 返回类 """ # 生成了一个generator attrs = ((name, value) for name, value in class_attr.items() ifnot name.startswith(‘__‘)) uppercase_attrs = dict((name.upper(), value) for name, value in attrs) return type(class_name, class_parents, uppercase_attrs) __metaclass__ = upper_attr pw = upper_attr(‘Trick‘, (), {‘bar‘: 0}) print hasattr(pw, ‘bar‘) print hasattr(pw, ‘BAR‘) print pw.BAR output: False True 0
正式类来作为元类传递给__metaclass__
class UpperAttrMetaClass(type): def __new__ (mcs, class_name, class_parents, class_attr): attrs = ((name, value) for name, value in class_attr.items() ifnot name.startswith(‘__‘)) uppercase_attrs = dict((name.upper(), value) for name, value in attrs) return super(UpperAttrMetaClass, mcs).__new__(mcs, class_name, class_parents, uppercase_attrs) class Trick(object): __metaclass__ = UpperAttrMetaClass bar = 12 money = ‘unlimited‘print Trick.BAR print Trick.MONEY
为什么要存在元类
元类的的目的:拦截类的创建,然后修改一些特性,然后返回该类。
就是感觉是装饰器干的事情,只是装饰器是修饰一个函数,同样是一个东西进去,然后被额外加了一些东西,最后被返回。
What is metaclass in Python http://stackoverflow.com/ques...
原文:http://www.cnblogs.com/jingtyu/p/7473101.html
内容总结
以上是互联网集市为您收集整理的python中的元类(metaclass)全部内容,希望文章能够帮你解决python中的元类(metaclass)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。