class decorators
像函数一样,class也可以有decorator. 例如:
class的decorator也是类似的语法糖,1
| Point = debugattr(Point)
|
.
在这个例子里面,我们”打开”了
这个类,并修改了它的
方法的定义。
metaclass是一种class,它创建的instance是class. metaclass几乎总是会继承自type.
一般来说,创建一个metaclass需要改写
方法,来实现自定义的功能:
在上面的例子里展示了如何将class decorator应用在metaclass里。多数情况下,能用metaclass实现的功能用decorator也能实现,但是metaclass的好处
在于会自动继承, 也就是说parent class的metaclass会自动成为subclass的metaclass. 例如:
总结一下,在python中,实现wrapping的方式有三种:
- decorator: wrapping functions
- class decorators: wrapping classes
- metaclasses: wrapping class hierarchies
另一个区别:decorator作用于decorated object定义之后,而metaclass作用于之前。
descriptor
descsriptors用来控制
运算符的语义。
super
super() 会调用下一个
里对象中的方法(而不是父类)。
import hooks
中包含了一个Finder list,可以用来影响module的加载. 例如,以下代码
定义了一个StructImporter,可以从xml中读取数据,并创建一个python module.
参考
Python 3 Metaprogramming