Python本身就是物件導向的程式語言,
說到物件導向就不能不提到其有名的三大特性,
今天就簡單來闡述下
Python 與 物件導向三大特性
物件導向的三大特性分別是
- 封裝
- 繼承
- 多型
封裝
簡單的說將同一類或者同一物的資料與運算打包起來,
就稱之為封裝
以Python為範例,
上面建立了一個矩形類別
class Rectangle: def __init__(self, length, width): self.length = length self.width = width def area(self): print("area = ", self.length*self.width) def Perimeter(self): print("perimeter = ", 2*(self.width+self.length))
要求矩形的周長與面積,
如果以函式的話,
勢必得要有兩次長度與寬度的資料傳入函式,
而封裝起來的物件,
僅需要直接調用定義的方法(Method)即可
myrectangle = Rectangle(4, 2) myrectangle.area() myrectangle.Perimeter()
繼承
則是將多個類別的相似處設為一個基礎類別,
各類別再針對個別特性從基礎類別去做延伸,
以貓狗為例子,
class Cat: def __init__(self, name): self.name = name def jumps(self): print("jump") def runs(self): print("run") def shout(self): print("my name is " + self.name + " meow ")
將定義其跑,跳,叫聲的類別以Python寫出來如上,
同樣在定義狗的時候,
卻重複了跑與跳,
寫兩次雖說不是不可以,
但這就是多餘的,
更何況若有多個類似物件,
重複的步驟可就多了,
這時候就可利用繼承方式將不一樣的挑出來
class Pet: def __init__(self, name): self.name = name def jumps(self): print("jump") def runs(self): print("run") class Dog(Pet): def shout(self): print("my name is " + self.name + " bow-wow ") class Cat(Pet): def shout(self): print("my name is " + self.name + " meow")
由於貓與狗只有叫聲不同,
將跑與跳定義為Pet類別,
在定義貓與狗時,
分別繼承Pet類別即可
多型
mycat = Cat("May") mydog = Dog("Lucky") mycat.shout() mydog.shout()
多型讓子類別(貓與狗)呼叫同名的方法(Method shout)時
呈現各子類別不同之處(貓叫與狗吠)
即有名的 duck typing,
"走路像鴨子,叫聲像鴨子,那它就是鴨子"
例如牛也能有叫聲,
它僅需要在類別中定義shout方法即可
也就是說不在乎是哪一種物件呼叫了同名方法,
只需要該物件有定義此同名方法就好了
沒有留言:
張貼留言