Chinaunix首页 | 论坛 | 博客
  • 博客访问: 445066
  • 博文数量: 138
  • 博客积分: 4114
  • 博客等级: 上校
  • 技术积分: 1341
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-14 20:41
文章分类

全部博文(138)

文章存档

2014年(1)

2013年(2)

2012年(78)

2011年(13)

2010年(34)

2009年(10)

我的朋友

分类: LINUX

2013-01-05 13:45:55

关于 __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) |
0

上一篇:sql order by 多个列

下一篇:java 类生命周期

给主人留下些什么吧!~~