关于 __metaclass__ 属性
class Foo(object):
__metaclass__ = something....
如果你这么做了,python就会用元类来创建Foo类。
首先写下 class Foo(object),但是类对象Foo还没有在内存中
创建。python会在类的定义中寻找__meta__class属性,如果找到了,
python就会用它来创建类Foo,如果没有找到,就会用内建的type
来创建这个类。
把下面这段话反复读几次
class Foo(Bar):
pass
Foo中有__metaclass__这个属性吗?如果是,python会在内存中通过
__metaclass__创建一个名字为Foo的类对象(这里是类对象,不是类的对象)。
如果python没有找到__metaclass__,它会继续在Bar(父类)中寻找__metaclass__
属性,并尝试做和前面同样的操作。如果Python在任何父类中都找不到__metaclass__,
它就会在模块层次中寻找__metaclass__,并尝试做同样的操作。如果还是找不到
__metaclass__,python就会用内置的type来创建这个类对象。
现在的问题是,你可以在__metaclass__中放置些什么代码呢?答案是:可以创建一个
类的东西。那么什么可以用来创建一个类呢?type,或者任何使用到type或者子类化
type的东东就可以。
阅读(716) | 评论(0) | 转发(0) |