元类
一、元类的的概念
(1)旧式类和新式类
#经典类 继承:instance类型(Python2) class MyClass: pass #新式类:继承Object class Test(object): pass
旧式类:对于旧式类,类(class)和类型(type)并不完全相同,一个旧式类的实例总是继承一个名为instance的内置类型。如果obj表示旧式类的实例,那么obj.class表示该类,但type(obj)始终是instance类型。
新式类:新式类统一了类(class)和类型(type)的概念,如果obj是新式类的实例,type(obj)则与obj.class相同。
注意点:
python2中,默认所有类都是旧式类。python2.2之前不支持新式类。
python3中,所有类都是新式类。
(2)class和type的类型
class Test(object): pass t=Test() print(type(t)) # <class '__main__.Test'> print(type(Test)) # <class 'type'> print(type(type)) # <class 'type'>
type的类型是type
(3)什么是元类
python中的任何新式类以及python 3中的任何类都是type元类的一个实例,函数type实际上是一个元类,type就是python在背后用来创建所有类的元类。
二、元类和继承的基类
type:是元类,所有的类都是通过type所创建出来的
object:顶层的基类,所有类继承的顶层父类都是object
三、使用type动态定义类
type(name,bases,dict):调用type()
- name:指定类名称,将成为该类的name属性
- bases:指定继承类的基类元组,将成为该类的bases属性
- dict:指定包含类主体定义的名称空间字典,将成为该类的dict属性。
四、自定义元类
posted on 2020-09-07 09:52 crystal1126 阅读(153) 评论(0) 编辑 收藏 举报