http://www.makeru.com.cn/live/detail/1637.html?s=144282
今天我们来聊聊Python当中一个新的默认函数__new__。
上一篇当中我们讲了如何使用type函数来动态创建Python当中的类,除了type可以完成这一点之外,还有另外一种用法叫做metaclass。原本这一篇应该是继续元类的内容,讲解metaclass的使用。但是metaclass当中用到了一个新的默认函数__new__,关于这个函数大家可能会比较陌生,所以在我们研究metaclass之前,我们先来看看__new__这个函数的用法。
真假构造函数
如果你去面试Python工程师的岗位,面试官问你,请问Python当中的类的构造函数是什么?
你不假思索,当然是__init__啦!如果你这么回答,很有可能你就和offer无缘了。因为在Python当中__init__并不是构造函数,new__才是。是不是有点蒙,多西得(日语:为什么)?我们不是一直将__init__方法当做构造函数来用的吗?怎么又冒出来一个__new,如果__new__才是构造函数,那么为什么我们创建类的时候从来不用它呢?
别着急,我们慢慢来看。首先我们回顾一下__init__的用法,我们随便写一段代码:
class Student:
def init(self, name, gender):
self.name = name
self.gender = gender
我们一直都是这么用的,对不对,毫无问题。但是我们换一个问题,我们在Python