元类

一、元类的的概念

(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  阅读(152)  评论(0编辑  收藏  举报

导航