使用 slot 定義只允許出現(xiàn)的屬性
要創(chuàng)建一個class對象,type()函數(shù)依次傳入3個參數(shù):
1、 class的名稱;
2、 繼承的父類集合,注意Python支持多重繼承,如果只有一個父類,別忘了tuple的單元素寫法;
3、 class的方法名稱與函數(shù)綁定,這里我們把函數(shù)fn綁定到方法名hello上。
通過type()函數(shù)創(chuàng)建的類和直接寫class是完全一樣的,因為Python解釋器遇到class定義時,僅僅是掃描一下class定義的語法,然后調(diào)用type()函數(shù)創(chuàng)建出class。
元類:
構(gòu)造一個元類->類定義->類實例
# metaclass是創(chuàng)建類,所以必須從`type`類型派生:
class ListMetaclass(type):
def __new__(cls, name, bases, attrs):
attrs['add'] = lambda self, value: self.append(value)
return type.__new__(cls, name, bases, attrs)
class MyList(list):
__metaclass__ = ListMetaclass # 指示使用ListMetaclass來定制類