国产探花免费观看_亚洲丰满少妇自慰呻吟_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的嘗試失敗了,而這恰恰證明我們成功了。

其實元類用的不多,理解理解。霍霍!!
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 衡南县| 朝阳县| 京山县| 丽水市| 东光县| 泸西县| 邵东县| 罗城| 丹巴县| 全椒县| 元谋县| 柞水县| 屏东市| 登封市| 方城县| 三门峡市| 伊金霍洛旗| 理塘县| 海门市| 长岭县| 桐柏县| 大连市| 通海县| 静安区| 双流县| 资阳市| 海伦市| 新建县| 宜黄县| 防城港市| 博客| 饶河县| 梁平县| 福贡县| 阿合奇县| 碌曲县| 贡嘎县| 津南区| 潜江市| 关岭| 金川县|