国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python 元類使用說明

2020-02-23 04:45:34
字體:
來源:轉載
供稿:網友
我要一大群的類都具有一中特點,我怎么給他們加上呢?模板模板嗎,我從這個模板創建一群類不就OK了?那就需要元類了。霍霍》

定義一個元類(就所一個類的模板!莫多想,還要記住這是類級別的,不是對象級別的!):
代碼如下:
class MyMeta(type):
def __init__(cls,name,bases,dic):
print cls.__name__
print name
def __str__(cls):return 'Beautiful class %s'%cls.__name__

這是個什么東西?哈,這是個元類。是個類的模板。

它要用在哪里?它要用在一個類里,作為這個類的模板。

起的什么作用?模板,就是提供一些共同的特征。

這個類提供了什么樣的特征?兩個特征,1。類定義后打印類的名字(__init__)。2。打印類的格式(__str__)。

到底回怎么工作,打開的你的解釋器,輸入以上的代碼,上路:

輸入:

class MyClass(object):
__metaclass__ = MyMeta

回車結束類的定義時,輸出:
MyClass
MyClass

明白了吧,霍霍!事實證明它確實是初始化一個類,而不是一個對象!!!!!這個是第一個特征。

第二個:

輸入:

print MyClass
輸出:

Beautiful class MyClass

啊哈,恰如其分,如我們所預料的那樣!!!!!!!!當然你可以任意個性化你的類!!

####################################################################################

下面我們來實現一個Singleton模式(來自啄木鳥社區):

Singleton元類:
代碼如下:
class Singleton(type):
def __init__(cls,name,bases,dic):
super(Singleton,cls).__init__(name,bases,dic)
cls.instance = None
def __call__(cls,*args,**kwargs):
if cls.instance is None:
cls.instance = super(Singleton,cls).__call__(*args,**kwargs)
return cls.instance

非常簡單的一個設計模式,相信你能明白是怎么回事!
代碼如下:
class MyClass(object):
__metaclass__ = Singleton
def __init__(self,arg):
self.arg = arg

使用了Singleton元類的類。

是不是只能有一個實例呢??那只能看看了,鄧爺爺說的好:實踐是檢驗真理的唯一標準。——精華!!
代碼如下:
>>> my1 = MyClass("hello")
>>> my2 = MyClass("world")
>>> my1 is my2
True
>>> my1.arg
'hello'
>>> my2.arg
'hello'

我們創建my2的嘗試失敗了,而這恰恰證明我們成功了。

其實元類用的不多,理解理解。霍霍!!
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泰兴市| 青铜峡市| 西乌珠穆沁旗| 昆明市| 泽普县| 百色市| 河北省| 元江| 都匀市| 渭源县| 兴义市| 牟定县| 万年县| 永仁县| 通州市| 双牌县| 个旧市| 金秀| 含山县| 洞口县| 西畴县| 开封市| 老河口市| 西宁市| 新龙县| 阜平县| 西乌珠穆沁旗| 湾仔区| 长泰县| 萍乡市| 新郑市| 吉林市| 长乐市| 木兰县| 山西省| 大同市| 玉林市| 临猗县| 马山县| 贺州市| 天峻县|