單例1:元類的單例
1import
settings23
4class
mymeat(type):
5呼叫__init__得到mysql呼叫之前的時候就有乙個預設的例項化的結果
6def
__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)
1314
呼叫__call__的方法就是自定義mysql這個物件的呼叫過程要怎麼實現
15def
__call__(self, *args, **kwargs): #
self=mysql
16if len(args) == 0 and len(kwargs) == 0: 判斷是否傳了引數,沒傳參就返回準備好的例項化物件,就是'
檔案物件'17
return self.__instance
18否則就重新例項化乙個新的物件(包括屬性,返回這個物件)
19 obj = self.__new__
(self)
20 self.__init__(obj, *args, **kwargs)
21return
obj22
2324
自定義乙個元類
25class mysql(object, metaclass=mymeat):
2627
def__init__
(self, ip, port):
28 self.ip =ip
29 self.port =port
3031
32 obj1 =mysql()
33 obj2 =mysql()
34 obj3 =mysql()
35 obj4 = mysql('
100.100.100.11
', 3320)
36print(obj1.__dict__)37
print(obj2.__dict__)38
print(obj3.__dict__)39
print(obj4.__dict__)
python元類單例 元類實現單例模式
python中的類也是物件。元類就是用來建立這些類 物件 的,元類就是類的類,你可以這樣理解為 myclass metaclass 元類建立 myobject myclass 類建立例項 實際上myclass就是通過type 來創建立出myclass類,它是type 類的乙個例項 同時myclass...
python 物件導向單例元類
通過類方法來實現單例,這樣我在執行乙個函式中建立物件,但是呼叫多次只是乙個例項。class person classmethod defsingle instancee cls,args,kwargs if notgetattr person,instance cls.instance person...
學習筆記01 單例和元類
參考個人覺得講解的很透徹。元類是乙個類的類,該類是它的元類的乙個例項。類的定義由它的元類決定,所以我們用類a建立乙個類時,python通過呼叫a type name,bases,dict 建立它,name 類的名字,bases 基類,dict 屬性變數。如下兩段 其實作用一樣。建立乙個hello類,...