1. 程式人生 > >廖雪峰python3複習總結——day7-4

廖雪峰python3複習總結——day7-4

多重繼承:通過多重繼承,一個子類就可以同時獲得多個父類的所有功能

Mixln:目的就是給一個類增加多個功能,這樣,在設計類的時候,我們優先考慮通過多重繼承來組合多個MixIn的功能,而不是設計多層次的複雜的繼承關係

定製類:Python的class中還有許多這樣有特殊用途的函式,可以幫助我們定製類。

__str__呼叫類時,print()返回特定的字串,直接呼叫時,返回的是開發者看到的字串。即__repr__

__iter__返回一個迭代物件,和__next__方法一起,呼叫next()

__getitem__取值和切片,isinstance(n, slice)

__getattr__當呼叫不存在的屬性時,比如score

,Python直譯器會試圖呼叫__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)