7.1 對象的魔力
多態:不同的對象或類調用同一個函數時執行不同的功能
封裝:隱藏對象具體的實現細節
繼承:使一個類具有另一個類的特性和方法
和C++理念相同
7.2 類和類型
私有化:使用雙下劃線
class A(B,C):創建類A並且繼承了類B,C,若B,C含有相同的方法則B會覆蓋C中的此方法。有前後順序的
檢查繼承:issuclass(A,B)——判斷A的父類(超類/基類)是不是B
本章新函數
callable(object)
中文說明:檢查對象object是否可調用。如果返回True,object仍然可能調用失敗;但如果返回False,調用對象ojbect絕對不會成功。
注意:類是可調用的,而類的實例實現了call()方法纔可調用。
版本:該函數在python2.x版本中都可用。但是在python3.0版本中被移除,而在python3.2以後版本中被重新添加。
>>> callable(0)
False
>>> callable("mystring")
False
>>> def add(a, b):
… return a + b
…
>>> callable(add)
True
>>> class A:
… def method(self):
… return 0
…
>>> callable(A)
True
>>> a = A()
>>> callable(a)
False
>>> class B:
… def __call__(self):
… return 0
…
>>> callable(B)
True
>>> b = B()
>>> callable(b)
True
getattr: 如果存在name屬性(方法)則返回name的值(方法地址)否則返回default值。
getattr(foo,'name','NA') #存在name屬性,所以返回其value
'fengyun'
getattr(foo,'age','NA')
'NA'
hasattr(object,name):判斷object中是否具有name屬性
hasattr(foo,’setName’) #判斷setName是否存在,存在則返回True。
isinstance(object,class):判斷對象是否是類的實例
issubclass(A,B):確定A是不是B的子類
random.choice(sequence):從非空序列隨機選擇元素
setattr(object,name,value):將對象object的屬性名爲name的屬性的值設爲value
type:返回對象的類型