Chinaunix首页 | 论坛 | 博客
  • 博客访问: 451390
  • 博文数量: 97
  • 博客积分: 1552
  • 博客等级: 上尉
  • 技术积分: 1091
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-17 17:05
个人简介

专注于大规模运维场景运维工具解决方案。欢迎有这方面兴趣的朋友跟我联系。

文章分类

全部博文(97)

文章存档

2014年(12)

2013年(25)

2012年(60)

我的朋友

分类: Python/Ruby

2012-07-18 09:07:24

一切皆对象
  • 一切皆对象
  • 一切都有类型[类也有类型]
  • "class"与"type"之间本质上没有不同
  • 类也是对象
  • 它们的类型是type
那既然类也是对象那类的类是什么?元类
类是元类的实例。调用元类是可以创建类出来。

所以说当你在创建一个类的时候python解释器是会调用元类来生成它。

点击(此处)折叠或打开

  1. class type(object)
  2. | type(object) -> the object's type
  3. | type(name, bases, dict) -> a new type
  4. name-   类名
  5. bases-  基类序列。
  6. dict-   包括名字影射的类成员字典
比如可以这样来创建一个类:

点击(此处)折叠或打开

  1. def __init__(self):
  2.     self.message = "Helloworld!"
  3. def say_hello(self):
  4.     print self.message
  5. attrs= {'__init__':__init__, 'say_hello':say_hello}

  6. bases = (object, )
  7. Hello = type('Hello', bases, attrs)
  8. print Hello

  9. #New object
  10. h = Hello()
  11. h.say_hello()
如果创建一个类继承type,比如

点击(此处)折叠或打开

  1. class PointlessMetaclass(type):
  2.     def __new__(meta,name,bases,attrs):
  3.         return type.__new__(meta,name,bases,attrs)
我们在实例化一个类的实例时会调用两个方法__new__与__init__。__init__ 初始化一个实例,而 __new__ 的职责是创建它。

采用元类的好处?
  • 可装饰类的所有方法,比如可以日志记录或性能剖析
  • 自动Mix-in新方法
  • 在创建时注册类
  • 提供接口注册,功能自动发现和接口适配
  • 类校验:防止子类化,校验所有的方法是否都有docstrings
在python2.6以后也可以使用类的装饰器来实现元类的功能.




阅读(651) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~