
元類別(Metaclasses)
|
171
__init__ 與 _ _repr_ _)。 MetaBunch 從
類別範疇移除那些資料屬性,改將它們安置在
一個名為 _ _dflts_ _ 的類別範疇字典中,並在
該類別放置帶有那些屬性之名稱的一個 _ _slots_ _,
一個接受它們每一個作為選擇性具名引數的 _ _init_ _
(缺少的就以 _ _dflts_ _ 中的值作為預設值),
以及一個 _ _repr_ _ 負責顯示與其預設值不同的
每個屬性的 repr 值(_ _repr__ 的輸出可被傳入給
__eval__ 來製作一個相等的實體,就跟平常的慣例一樣,
如果每個非預設值的屬性也遵守這個慣例的話)。
在 v3 中,資料屬性的順序會跟類別主體中一樣,
但在 v2 中沒有這種保證。
"""
def __prepare__(name, *bases, **kwargs):
# 在 v3 中很珍貴,在 v2 中無害但也沒有用處
return collections.OrderedDict()
def __new__(mcl, classname, bases, classdict):
""" 所有的事情都需要在 _ _new_ _ 中進行,因為
type.__new__ 是 _ _slots_ _ 被納入考量的地方。
"""
# 將我們會在新類別中使用的 _ _init_ _ 與 _ _repr__
# 定義為區域函式
def __init__(self, **kw): ...