在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代码。