廖雪峰python3複習總結——day7-4
阿新 • • 發佈:2018-12-10
多重繼承:通過多重繼承,一個子類就可以同時獲得多個父類的所有功能
Mixln:目的就是給一個類增加多個功能,這樣,在設計類的時候,我們優先考慮通過多重繼承來組合多個MixIn的功能,而不是設計多層次的複雜的繼承關係
定製類:Python的class中還有許多這樣有特殊用途的函式,可以幫助我們定製類。
__str__呼叫類時,print()返回特定的字串,直接呼叫時,返回的是開發者看到的字串。即__repr__
__iter__返回一個迭代物件,和__next__方法一起,呼叫next()
__getitem__取值和切片,isinstance(n, slice)
__getattr__當呼叫不存在的屬性時,比如score
__getattr__(self, attr)
來嘗試獲得屬性
__call__()
方法,就可以直接對例項進行呼叫。
使用列舉類:
Enum
可以把一組相關常量定義在一個class中,且class不可變,而且成員可以直接比較。
表示式為:
from enum import Enum
Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))
預設給Month.Jan賦值為1
若要精準控制則:可以呼叫@unique
使用元類:
使用type()既可以返回資料型別,也可以建立類。
>>> def fn(self, name='world'): # 先定義函式
... print('Hello, %s.' % name)
...
>>> Hello = type('Hello', (object,), dict(hello=fn)) # 建立Hello class
第一個引數為class名稱;
第二個引數為繼承的父類;
第三個引數為繫結的函式
使用metaclass:先定義metaclass,就可以建立類,最後建立例項.類可以看做是元類的例項。
# metaclass是類的模板,所以必須從`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): pass L = MyList() L.add(1) print(L)