单例1:元类的单例
1 import settings 2 3 4 class Mymeat(type): 5 调用__init__得到Mysql调用之前的时候就有一个默认的实例化的结果 6 def __init__(self, class_name, class_bases, class_dic): 7 创建一个初始化的对象,并把这个对象保存下来 8 self.__instance = self.__new__(self) 9 初始化对象的属性就是文件中的数据 10 self.__init__(self.__instance, settings.IP, settings.PORT) 11 继承子类的属性 12 super(Mymeat, self).__init__(class_name, class_bases, class_dic) 13 14 调用__call__的方法就是自定义Mysql这个对象的调用过程要怎么实现 15 def __call__(self, *args, **kwargs): # self=Mysql 16 if len(args) == 0 and len(kwargs) == 0: 判断是否传了参数,没传参就返回准备好的实例化对象,就是'文件对象' 17 return self.__instance 18 否则就重新实例化一个新的对象(包括属性,返回这个对象) 19 obj = self.__new__(self) 20 self.__init__(obj, *args, **kwargs) 21 return obj 22 23 24 自定义一个元类 25 class Mysql(object, metaclass=Mymeat): 26 27 def __init__(self, ip, port): 28 self.ip = ip 29 self.port = port 30 31 32 obj1 = Mysql() 33 obj2 = Mysql() 34 obj3 = Mysql() 35 obj4 = Mysql('100.100.100.11', 3320) 36 print(obj1.__dict__) 37 print(obj2.__dict__) 38 print(obj3.__dict__) 39 print(obj4.__dict__)