单例设计模式:
让类创建的对象,在系统中只有唯一的实例,
使用python类内置的__new__()方法实现,__new__()方法在创建对象时会被自动调用,通过重写__new__()方法,使得无论用类型创建多少个对象,内存中都只创建一个对象的实例,此时__new__()方法必须返回此内置函数的调用,及return super().__new__(cls)
class MyClass():
# 类属性,记录第一个被创建对象的引用
instance = None def __new__(cls, *args, **kwargs):
if cls.instance is None:
cls.instance = super().__new__(cls)
return cls.instance def __init__(self):
print("初始化方法!") a = MyClass()
print(a)
b = MyClass()
print(b)
若想使得初始化动作只执行一次:
class MyClass():
# 类属性,记录第一个被创建对象的引用
instance = None
# 记录是否执行过初始化动作
init_flag = False
def __new__(cls, *args, **kwargs):
if cls.instance is None:
cls.instance = super().__new__(cls)
return cls.instance def __init__(self):
if MyClass.init_flag:
return
print("初始化方法!")
MyClass.init_flag = True a = MyClass()
print(a)
b = MyClass()
print(b)