python高级编程 ------元类(1)
来源:互联网 发布:东方财富网 for mac 编辑:程序博客网 时间:2024/06/05 05:39
在python中,几乎所有一切都是对象。
负责生成其他类的类就是元类(Metaclass)。
类与对象:
类与类的实例关系(可以继承)
1、类定义了其实例的属性和行为;
2、类可以作为创建实例的工厂。
实例化Type类
直接使用type
type类是内置类(默认元类)
其他类对象的默认类。
可以直接通过type创建类接收参数位置(name(类名称), bases(基类的元组), attrs(类中所有属性的字典))
bases后面要加逗号,告诉解释器将其作为元组
object是类继承链中的最高级,type也是元类层级的最高级。
自定义__new__方法:
一共有四个位置参数
第一个:元类自身
3个位置参数:
string类型的类名称;
bases的元组;
包含属性的字典attrs
自定义元类通常会重载__new__方法,但通常不会实现__init__方法
值得注意的是: 元类可以继承
使用元类:
在3中元类和基类声明在一起 关键字参数metaclass
calss C(metaclass=Meta):
pass
等同于
class C(object, metaclass=Meta):
pass
2:
class C(object):
__metaclass__ = Meta
跨版本使用
使用six工具来进行跨版本的
第一种方法:
创建一个替代object类的虚拟类
import
class C(six.with_metaclass(Meta)):
pass
第二种方法:
将元类赋给一个类,使用装饰器@six.add_metaclass.
import six
@six.add_metaclass(Meta):
pass
2->3 six工具 明智
3->2 直接编写3代码。
负责生成其他类的类就是元类(Metaclass)。
类与对象:
类与类的实例关系(可以继承)
1、类定义了其实例的属性和行为;
2、类可以作为创建实例的工厂。
实例化Type类
直接使用type
type类是内置类(默认元类)
其他类对象的默认类。
可以直接通过type创建类接收参数位置(name(类名称), bases(基类的元组), attrs(类中所有属性的字典))
bases后面要加逗号,告诉解释器将其作为元组
object是类继承链中的最高级,type也是元类层级的最高级。
自定义__new__方法:
一共有四个位置参数
第一个:元类自身
3个位置参数:
string类型的类名称;
bases的元组;
包含属性的字典attrs
自定义元类通常会重载__new__方法,但通常不会实现__init__方法
值得注意的是: 元类可以继承
使用元类:
在3中元类和基类声明在一起 关键字参数metaclass
calss C(metaclass=Meta):
pass
等同于
class C(object, metaclass=Meta):
pass
2:
class C(object):
__metaclass__ = Meta
跨版本使用
使用six工具来进行跨版本的
第一种方法:
创建一个替代object类的虚拟类
import
class C(six.with_metaclass(Meta)):
pass
第二种方法:
将元类赋给一个类,使用装饰器@six.add_metaclass.
import six
@six.add_metaclass(Meta):
pass
2->3 six工具 明智
3->2 直接编写3代码。
阅读全文
0 0
- python高级编程 ------元类(1)
- Python高级编程-----元类(2)
- Python高级编程--元类
- python高级编程(六)--元类、内建属性
- Python高级编程——9.元类
- python高级编程-----类工厂(1)
- Python元类编程
- Python高级主题:MetaClass 元类
- 【Python】学习笔记——-8.6、面向对象高级编程:6.使用元类
- Python中的元类编程
- Python 中的元类编程
- Python 中的元类编程
- python学习笔记(30)--元编程1-装饰器
- python高级编程(一)--多线程编程
- python高级编程(二)--网络编程
- Python元类编程——with_metaclass
- Python 元编程
- Python--元编程
- 威佐夫博弈
- 【机器学习杂货铺】——判别模型和生成模型(暂缺)
- ES及插件安装和集群搭建
- golang中的map
- 半透明对话框的Activity
- python高级编程 ------元类(1)
- c++程序设计语言(the c++ programing language) 目录
- 优化策略5 Label Smoothing Regularization_LSR原理分析
- java中dao层和service层的区别,为什么要用service?
- Unity3D常见技术笔试题
- CSS3 弹性盒布局
- 九九乘法表的实现方法
- set语法
- 剑指offer | 训练题46:求1+2+3+...+n