首先我們先來了解乙個概念,什麼是元類?
我們建立乙個類目的是為了建立該類的例項物件,而元類就是用來建立類的。換個理解方式就是,元類就是建立類的類。
python中建立類的方法有很多,接下來讓我們一起來探索一下吧。
第一種:使用class關鍵字建立類
class
demo
:def
__init__
(self)
:pass
deftest
(self)
:pass
第二種:使用type關鍵字
import types
def__init__
(self)
:pass
deftest
(self)
:pass
cls_dict =
demo = types.new_class(
'demo',(
),,lambda ns: ns.update(cls_dict)
)demo.__module__ = __name__
這裡我們重點來看一下new_clas的引數, 第二個引數是基類,這個就不用在說了, 第三個引數是乙個關鍵字引數,比如需要遠元類的時候, metaclass = ***, 就可以放在第三個引數裡,
第四個引數是最神秘的,其實這個引數是__prepare__ 方法返回的物件,prepare__做什麼,什麼時候被呼叫? 這個方法的作用是建立命名空間,並且返回乙個類字典,然後在類新增屬性的時候,這個字典可以被更新。什麼時候被呼叫,元類的最開始,早於__new和__init__ 這兩個方法。其實type是python中所有類的元類
第三種:自定義元類來建立類
from collections import ordereddict
class
orderedmeta
(type):
def__new__
(cls, clsname, bases, clsdict)
: d =
dict
(clsdict)
order =
for name, value in clsdict.items():
ifisinstance
(value, typed)
: value._name = name
d['_order'
]= order
return
type
.__new__(cls, clsname, bases, d)
@classmethod
def__prepare__
(cls, name, bases)
:return ordereddict(
)class
structure
(metaclass=orderedmeta)
:print
("this is structure."
)
上邊的元類的作用就是按順序捕捉類屬性的定義。
好了,今天就到這裡,關於元類還有很多很多的東西。留給大家去探索了。
Python高階篇 python之函式的類的方法
類的成員可以分為三大類 字段 方法和屬性 注 所有成員中,只有普通欄位的內容儲存物件中,即 根據此類建立了多少物件,在記憶體中就有多少個普通字段。而其他的成員,則都是儲存在類中,即 無論物件的多少,在記憶體中只建立乙份。一 字段 字段包括 普通欄位和靜態字段,他們在定義和使用中有所區別,而 最本質的...
python練習 高階篇)
1 求1 2 3 4 5 99的和 count 1 s1 0 s2 0 while count 100 if count 2 0 s1 count else s2 count count 1 s s1 s2 print s 2 用python編寫程式,輸入一年份,判斷該年份是否是閏年並輸出結果 注 ...
Python 高階專用類方法的例項詳解
python 高階專用類方法的例項詳解 除了 getitem 和 setitem 之外 python 還有更多的專用函式。某些可以讓你模擬出你甚至可能不知道的功能。下面的例子將展示 userdict 一些其他專用方法。def repr self return repr self.data 1 def...