我要一大群的類都具有一種特點,我怎麼給他們加上呢?模板嘛,我從這個模板建立一群類不就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的嘗試失敗了,而這恰恰證明我們成功了。
python元類的使用 Python的元類如何使用
這次給大家帶來python的元類如何使用,使用python元類的注意事項有哪些,下面就是實戰案例,一起來看一下。今天我的任務就是徹底明白什麼是元類,一起看看。要搞懂元類,我們還是先從物件說起。python 一切皆物件,這句話你一定有聽說過 現在你就聽說了 乙個數字是物件,乙個字串是物件,乙個列表是物...
python元類的使用 python使用元類
原文 type 動態語言和靜態語言最大的不同,就是函式和類的定義,不是編譯時定義的,而是執行時動態建立的。比方說我們要定義乙個hello的class,就寫乙個hello.py模組 當python直譯器載入hello模組時,就會依次執行該模組的所有語句,執行結果就是動態建立出乙個hello的class...
python如何使用元 Python的元類如何使用
這次給大家帶來python的元類如何使用,使用python元類的注意事項有哪些,下面就是實戰案例,一起來看一下。今天我的任務就是徹底明白什麼是元類,一起看看。要搞懂元類,我們還是先從物件說起。物件 object python 一切皆物件,這句話你一定有聽說過 現在你就聽說了 乙個數字是物件,乙個字串...