一丶什么是单例模式
单例是一种 设计模式 ,应用该模式的类只会生成一个实例。
设计模式?
用于解决某种固定问题的套路
MVC
MTV
二丶为什么用单例模式
单例是为了节省 资源,当一个类的所有对象属性全部相同时,则没有必要创建多个对象
三丶实例的单例
class Person():
def __init__(self,name,age):
self.name = name
self.age = age
def say_hi(self):
print("hello im %s" % self.name)
# 用于获取对象的方法
@staticmethod
def get_instance():
#判断是否已经有了对象
if hasattr(Person,"obj"):
return getattr(Person,"obj")
obj = Person("jack",18)
Person.obj = obj
print("new 了")
return obj
p = Person.get_instance()
p.say_hi()
p2 = Person.get_instance()
p2.say_hi()
p3 = Person.get_instance()
p3.say_hi()
四丶单例元类
class Single(type):
def __call__(self, *args, **kwargs):
if hasattr(self,"obj"): #判断是否存在已经有的对象
return getattr(self,"obj") # 有就返回
obj = super().__call__(*args,**kwargs) # 没有则创建
print("new 了")
self.obj = obj # 并存入类中
return obj
class Student(metaclass=Single):
def __init__(self,name):
self.name = name
class Person(metaclass=Single):
pass
# 只会创建一个对象
Person()
Person()