一切皆对象
- 一切皆对象
- 一切都有类型[类也有类型]
- "class"与"type"之间本质上没有不同
- 类也是对象
- 它们的类型是type
那既然类也是对象那类的类是什么?元类
类是元类的实例。调用元类是可以创建类出来。
所以说当你在创建一个类的时候python解释器是会调用元类来生成它。
- class type(object)
- | type(object) -> the object's type
- | type(name, bases, dict) -> a new type
- name- 类名
- bases- 基类序列。
- dict- 包括名字影射的类成员字典
比如可以这样来创建一个类:
- def __init__(self):
- self.message = "Helloworld!"
- def say_hello(self):
- print self.message
- attrs= {'__init__':__init__, 'say_hello':say_hello}
- bases = (object, )
- Hello = type('Hello', bases, attrs)
- print Hello
- #New object
- h = Hello()
- h.say_hello()
如果创建一个类继承type,比如
- class PointlessMetaclass(type):
- def __new__(meta,name,bases,attrs):
- return type.__new__(meta,name,bases,attrs)
我们在实例化一个类的实例时会调用两个方法__new__与__init__。
__init__ 初始化一个实例,而 __new__ 的职责是创建它。
采用元类的好处?
- 可装饰类的所有方法,比如可以日志记录或性能剖析
- 自动Mix-in新方法
- 在创建时注册类
- 提供接口注册,功能自动发现和接口适配
- 类校验:防止子类化,校验所有的方法是否都有docstrings
在python2.6以后也可以使用类的装饰器来实现元类的功能.
阅读(664) | 评论(0) | 转发(0) |