__new__方法实际上在__init__方法之前执行,用于创建类的实例。然而__init__方法负责实例创建后对其进行自定义,__new__方法才是实际上创建并返回实例的方法。
__new__方法的第一个也是最重要的参数是创建实例所需的要的类(按照惯例,命名为cls)。
在大多数起概况下,__new__方法的其他参数会被完整复制到__init__方法中。参数在调用类构造函数时首先会被传递给__new__方法,然后再传递给__init__方法。
在实际应用中,大多数类无需定义__new__方法。该方法在python中的内置实现已经足够。
通常,我们希望__new__方法返回一个已经被初始化后的类的实例。在某些情况下,并不需要这么做。需要注意的是,只有在通过__new__方法返回当前类的实例时才会执行__init__方法。如果返回的不是当前类的实例,就不会调用__init__方法。
class MyClass(object): def __new__(cls,a): print("__new__ 被调用,参数为:%d"%a) #在实现__new__方法的时候,应该首先调用父类的__new__方法 #然后再开始自定义的逻辑 #调用父类__new__方法创建实例,并返回 return object.__new__(cls)
def __init__(self,a): print("__init__ 被调用,参数为:%d"%a)
#解释器先将参数100传递给__new__方法 #如果__new__方法创建对象,那么会调用__init__方法 #这时会将参数100再传递给__init__方法 mclass = MyClass(100) |
总结
|