元類實現單例

單例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__)
相關文章
相關標籤/搜索