Python學習-第六章 抽象
阿新 • • 發佈:2018-11-19
抽象
內建函式callable可以判斷某個物件是否可呼叫
>>> import math
>>> x=1
>>> y=math.sqrt
>>> callable(x)
False
>>> callable(y)
True
定義函式用def:
>>> def fibs(num): ... result=[0,1] ... for i in range(num-2): ... result.append(result[-2]+result[-1]) ... return result ... >>> fibs(10) [0, 1, 1, 2, 3, 5, 8, 13, 21, 34] >>> fibs(15) [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]
要給函式編寫文件,以確保其他人能夠理解,可添加註釋(以#打頭的內容)。還有另一種編寫註釋的方式,就是新增獨立的字串。放在函式開頭的字串稱為文件字串,將作為函式的一部分儲存起來。
函式vars返回看不見的字典,一般而言不應修改vars返回的字典。
多型:可對不同型別的物件執行相同的操作。不同物件對同一方法響應不同的行動。
封裝:對外部隱藏有關物件工作原理的細節。
繼承:可基於通用類創建出專用類。
多型讓你無需知道物件所屬的類(物件的型別)就能呼叫其方法,而封裝讓你無需知道物件的構造就能使用它。
多型的舉例:
class A: def fun(self): print("我是小A。。。。。") class B: def fun(self): print("我是小B。。。。。")
使用了多型但沒有使用封裝的示例
>>> class OpenObject:
... def set_name(self,name):
... self.name=name
... def get_name(self): #self是指向物件本身
... return self.name
...
>>> o=OpenObject()
>>> o.set_name('Sir Lancelot')
>>> o.get_name()
'Sir Lancelot'
在Python3以前的版本中建立類要加上_metaclass_=type
要指定超類,可在class語句中的類名後加上超類名,並將其用圓括號括起。
>>> class Filter:
... def init(self):
... self.blocked=[]
... def filter(self,sequence):
... return [x for x in sequence if x not in self.blocked]
...
>>> class SPAMFilter(Filter):
... def init(self):
... self.blocked=['SPAM']
...
>>> f=Filter()
>>> f.init()
>>> f.filter([1,2,3])
[1, 2, 3]
>>> s=SPAMFilter()
>>> s.init()
>>> s.filter(['SPAM','SPAM','SPAM','SPAM','eggs','bacon','SPAM'])
['eggs', 'bacon']
內建方法issubclass可以確定一個類是否是另一個類的子類。
>>> class Calculator:
... def calculate(self,expression):
... self.value=eval(expression)
...
>>> class Talker:
... def talk(self):
... print('Hi,my value is',self.value)
...
>>> class TalkingCalculator(Calculator,Talker):
... pass
...
>>> tc=TalkingCalculator()
>>> tc.calculate('1+2*3')
>>> tc.talk()
Hi,my value is 7
這被稱為多重繼承,使用多重繼承時,注意:如果多個超類以不同的方式實現了同一方法(即有多個同名方法),必須在class語句中小心排列這些超類,因為位於前面的類的方法將覆蓋位於後面的類的方法。
多個超類的超類相同時,查詢特定方法或屬性時訪問超類的順序稱為方法解析順序。
用hasttr可以檢查所需的方法是否存在。
>>> hasattr(tc,'talk')
True
>>> hasattr(tc,'fnord')
False
可以使用@abstractmethod來將方法標記為抽象的-在子類中必須實現的方法