Sat 26 March 2016
Python的metaclass小记
使用metaclass的时候可以使用metaclass的__new__和__init__去改变所定义的类的相关属性,因为这两个方法是在类定义的时候被调用,他们所需的参数也与使用type(name, bases, dict)动态声明类相同。而使用metaclass的__call__可以影响我们所声明的类产生实例的过程,因为当我们使用class_name()去产生实例的时候,相当于call了这个class,而这个class又是metaclass的实例,所以其实调用了metaclass的__call__ 注意: 通过super来调用父类的__new__时,第一个参数需要是该class,这点是不同于调用__init__等其他父类方法的。因为__new__是个静态方法。还有一个小问题就是当父类是object的时候,也就是调用object.__new__()只传一个cls参数就可以了,至于为什么,请戳here 和here。 如果你重写了__new__而没有重写 ... read more