上海isp 发表于 2018-8-9 12:42:37

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]
查看完整版本: Python设计模式——单例模式