本篇文章给大家带来的内容是关于Python中new类方法和init 实例方法以及单例模式的介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
“Python 中的类都是单例模式?” 一天,一同事问我这样一个问题。这是一个奇怪的问题,可能你也这么认为。这里先不做解释,我们先来看看 __new__ 和 __init__ 方法。
new 与 init
__new__ 方法属于新式类,即属于 object 类。它是一个静态方法,但是其第一个参数必须是一个类(cls),这有点像一个 classmethod,其实将其看成是一个类方法也可以。该特殊方法被调用时,会创建类(cls)的一个新实例并返回,实例被创建后解释器会将该实例以及其它的参数传递给该实例的初始化函数 __init__,以对实例进行初始化。
所以,__new__ 方法是一个类方法,用于创建一个实例,而 __init__ 方法是一个实例方法,用于初始化一个实例。
__new__ 方法在实例化一个类时被调用,重写该方法应该像如下的形式:class A(object):
def __new__(cls, *args, **kwargs)
return super(A, cls).__new__(cls, *args, **kwargs)
如果 __new__ 方法不返回 cls 的一个实例,那么新的实例的 __init__ 方法不会被调用。需要注意的是,在 Python 3.3 之后,new 方法不再接收额外的参数,否则会有异常 TypeError: object() takes no parameters。
__init__ 方法在实例