Python设计模式——单例模式
# class Demo:# def __init__(self, name):
# self.name = name
#
# def show_name(self):
# print("Name is: {}".format(self.name))
#
# if __name__ == '__main__':
#
# d = Demo("toby")
# d.show_name()
'''
引用大神的描述:
这样便是__init__最普通的用法了。但__init__其实不是实例化一个类的时候第一个被调用的方法。
当使用Demo("toby")这样的表达式来实例化一个类时,最先被调用的方法其实是 __new__ 方法。
__new__ 方法是什么?
__new__方法接受的参数虽然也是和__init__一样,但__init__是在类实例创建之后调用,而__new__方法正是创建这个类实例的方法。
'''
class Demo:
def __new__(cls, name):
print("Call __new__")
class_instance = super(Demo, cls).__new__(cls)
print("new创建了类实例:", class_instance) #打印一下
return class_instance #返回Demon类的一个实例给__init__,然后利用这个实例来调用类的__init__方法
def __init__(self, name): #那__init__用什么来接收__new__返回来的类实例呢?答案就是self
print("init接收到new返回回来的类实例:", self) #打印一下这个self,也就是看一下由__new__产生的实例
print("Call __init__")
self.name = name
def show_name(self):
print("Name is: {}".format(self.name))
#
# if __name__ == '__main__':
# d = Demo("toby")
# d.show_name()
'''
引用大神的总结:
所以,__init__ 和 __new__ 最主要的区别在于:
1、__init__ 通常用于初始化一个新实例,控制这个初始化的过程,比如添加一些属性,
做一些额外的操作,发生在类实例被创建完以后。它是实例级别的方法。
2、__new__ 通常用于控制生成一个新实例的过程。它是类级别的方法。
但是说了这么多,__new__最通常的用法是什么呢,我们什么时候需要__new__?,单例模式就是一个很好的例子
'''
页:
[1]