python元類的使用 Python 元類使用講解

2021-10-18 14:46:08 字數 1580 閱讀 9513

我要一大群的類都具有一種特點,我怎麼給他們加上呢?模板嘛,我從這個模板建立一群類不就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 一切皆物件,這句話你一定有聽說過 現在你就聽說了 乙個數字是物件,乙個字串...