如果你的对象实现(重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用,你可以定义自己想要的行为,而这一切都是自动发生的。
__new__:
是一个对象实例化时调用的第一个方法,这个方法用来创建实例,接下来调用__inti__方法初始化实例
第一个参数是当前类,其他参数用来传递给__init__
主要用于继承一个不可变的类型如元组,字符串
return一个构建的实例 (可用来构建单例模式)
class Person(object): def __init__(self, name, age): self.name = name self.age = age def __new__(cls, *args, **kwargs): if not hasattr(cls,'instance'): cls.instance = super(Person,cls).__new__(cls) return cls.instancea = Person('p1',20)b = Person('p2',21)print(a == b)#这里的打印结果是True,可见a,和b都是同一个实例#单例作用:#第一、控制资源的使用,通过线程同步来控制资源的并发访问;#第二、控制实例产生的数量,达到节约资源的目的。#第三、作为通信媒介使用,也就是数据共享,它可以在不建立直接关联的条件下,让多个不##相关的两个线程或者进程之间实现通信。#比如,数据库连接池的设计一般采用单例模式,数据库连接是一种数据库资源。