單例1:元類的單例sql
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__)