单例是一种 设计模式 ,应用该模式的类只会生成一个实例。python
设计模式? 用于解决某种固定问题的套路 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()