Python - 初始化程序与构造函数

ori*_*ari 6 python constructor initializer

我听说__init__python 中的函数不是构造函数,它是一个初始化器,实际上__new__函数是构造函数,不同之处在于__init__函数是在创建对象和__new__之前调用之后调用的.我对吗?你能解释的区别更好,我们为什么需要两个__new____init__

Eit*_*hos 8

本质上,__new__负责创建实例(因此,可能准确地说它是构造函数,正如您所指出的那样),而__init__实际上是一种在实例中初始化状态的方法.例如,考虑一下:

class A(object):

    def __new__(cls):
        return object.__new__(cls)

    def __init__(self):
        self.instance_method()

    def instance_method(self):
        print 'success!'

newA = A()
Run Code Online (Sandbox Code Playgroud)

注意__init__接收参数self,同时__new__接收class(cls).因为self是对实例的引用,所以这应该非常明显地告诉你实例已经__init__被调用的时间创建,因为它传递了实例.也可以精确调用实例方法,因为实例已经创建.

至于你的第二个问题,根据我的经验,很少需要使用__new__.可以肯定的是,有些情况可能会使用更先进的技术__new__,但这些技术很少见.人们可能想要使用的一个臭名昭着的例子__new__是在Singleton类的创建中(无论这是否是一个好技术,然而,不是重点).

无论好坏,您基本上可以控制实例化的过程,以及在您的特定情况下可能意味着什么.