python学习笔记-Metaclass理解

来源:互联网 发布:淘宝卖家客户端下载 编辑:程序博客网 时间:2024/05/20 14:19

什么叫做元类

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'>>>>

那么, classclass 属性又是谁?

>>> a = 2>>> a.__class__.__class__<type 'type'>>>> name = 'tom'>>> name.__class__.__class__<type 'type'>

所以,元类是用来创建类的。可以叫元类为 类工厂

type 是Python使用的内建元类,当然,Python允许建立自己的元类.

0 0