制心一处,无事不办

1.单例模式

#单例设计模式就是在当前脚本中,同一个类只能实例化一个对象,去使用

python中如何实现单例设计模式呢?
1.需要有一个方法,可以去控制当前对象的创建?
构造方法new
2.需要有一个标识来存储和表示是否有对象
创建一个属性进行存储,默认为None
3.在创建对象的方法中去检测和判断是否有对象?
如果没有对象,则创建对象,并且把对象存储起来
如果存储的是对象,则直接返回对象,就不需要创建新的对象了

注意:new构造方法
#触发机制:实例化对象时自动触发(在init之前触发)
作用:管理或控制对象创建的过程
参数:一个cls接收当前类,其他参数根据初始化方法的参数进行决定
返回值:必须返回object.new(cls)进行对象的创建,如果没有返回值,则实例化对象的结果为None
注意事项:new方法的参数和init方法的参数要保持一致,除了第一个参数
应用场景:设计模式中的单例模式

class Demo():
#2.定义私有属性存储对象,默认值为None
___obj = None
#1.定义构造方法
def new(cls, args, *kwargs):
#3.在创建对象的过程中,判断是否有对象
if cls.__obj:
#有对象
return cls.__obj
else:
#没有对象创建
obj = object.new(cls)
#存储起来
cls.__obj = obj
#返回对象
_return obj

#实例化对象
_a = Demo()
b = Demo()
print(a,b)
#此时虽然对象a和对象b名字不同,但本质上都是一个对象,打印的地址相同_

2.Mixin混合模式

#混合类就是加上个mixin而已,约定俗成的
#加上Mixin的类通常不单独使用.而是混合到其他类中去增加功能的

_#示例如下

交通工具类
class jtgj():
#拉货
def lahuo(self):
print(‘可以拉货’)
#载人
_def zairen(self):
print(‘可以载人’)

#飞行器类
class fxqMixin():
_#飞行功能
_print(‘可以飞行’)

#汽车类
class qc(jtgj):
pass
#民航飞机类
class mh(jtgj,fxqMixin):
pass
#直升机类
class zsj(jtgj,fxqMixin):
pass