Python 魔法方法new与单例模式的实现

it2022-05-05  71

单例模式:

应用该模式的一个类只有一个实例,即一个类只有一个对象实例。 class A(object): def __new__(cls): print("执行了new方法") return super().__new__(cls) def __init__(self): print("执行了init方法") if __name__ == '__main__': a = A() # 执行了new方法 # 执行了init方法 print(a) # <__main__.A object at 0x00000285FFF628D0>

new 方法先于 init 方法执行,new方法传入的是一个类(cls),而 init 传入的是一个实例对象(self) __new__方法返回的值就是一个实例化对象 如果__new__方法返回None, 则__init__方法不会被执行,并且返回值只能调用父类中的__new__方法,而不能调用毫无关系的类的__new__方法)

new实现单例模式

# 通过 new 方式实现单一实例 # hasattr() 函数用于判断对象是否包含对应的属性。 # 格式:hasattr(object, name) class A(object): def __new__(cls): print("开始执行new方法") if not hasattr(cls, "_ins"): cls._ins = super().__new__(cls) return cls._ins def __init__(self): print("开始执行init方法") if __name__ == '__main__': a = A() a1 = A() if id(a) == id(a1): print(f"实例对象相同,id:{id(a)} - > id:{id(a1)}")

最新回复(0)