什么叫做元类
Metaclass是创建class的东西。
一个class是用来创建对象的,但Python中的类也是对象。
Metaclass就是用来创建类这些对象的,它们是类的类,可以形象化地理解为:
MyClass = MetaClass()
MyObject = MyClass()
python 中type 函数可以这样使用:
MyClass = type(‘MyClass’, (), {})
这是因为 type 实际上是个 metaclass , Python使用 type 这个元类来创建所有的类。
为什么 type 是小写开头的,而不是 Type 呢?既然它是个元类!
大概是因为和 str , int 来保持一致吧, str也是一个类,用来创建字符串。
你可以检查下对象的 class 属性来看看它们的类是谁. Python中万物都是对象:
>>> age = 7
>>> age.__class__
<type 'int'>
>>> name = 'tom'
>>> name.__class__
<type 'str'>
>>> def fun():pass
...
>>> foo.__class__
<type 'function'>
>>> class Cat(object): pass
...
>>> b = Cat()
>>> b.__class__
<class '__main__.Cat'>
>>>
那么, class 的 class 属性又是谁?
>>> a = 2
>>> a.__class__.__class__
<type 'type'>
>>> name = 'tom'
>>> name.__class__.__class__
<type 'type'>
所以,元类是用来创建类的。可以叫元类为 类工厂
type 是Python使用的内建元类,当然,Python允许建立自己的元类.