什麼是OOP
相信軟體開發工程師對於這詞應該不陌生,所以我就多做贅述了,我只提及其重要的四個觀念在Python如何實作:
繼承
繼承的語法相較之下比較簡單請各位讀者看以下例子:
class Animal:
name = ''
def __init__(self, name):
self.name = name
def walk(self):
print('walking')
def eat(self):
print('eating')
class Dog(Animal):
def __init__(self, name):
super().__init__(name)
def walk(self):
print('{0} using foot walk'.format(self.name))
def eat(self):
print('{0} eat bone'.format(self.name))
animal = Dog('A')
animal.eat()
animal.walk()
由上述程序說明了Python使用
的物件。( )
`表示所繼承的物件,當要使用時只要
`類別名稱()
`即可產生一個型別為該
`類別名稱
再進一步說明,這裏的
是呼叫父類別的語法,上述例子是建構子中呼叫父類別的建構子並將名稱賦予進去。self
`指的是物件實體,當要使用物件的屬性時都要加上
`self.
`前綴詞。再來
`__init__
`是類別的建構子,當使用
`類別名稱()
`會先呼叫建構子,並執行建構子的程序,在Dog的例子中會給予該物件一個名字,再來
`super
封裝
在上述繼承的例子中
前綴詞來命名變數名稱例如:eat()
`與
`walk()
`就是封裝的表現,讓外部使用者直接使用而不需考慮內部實作,若是在開發中如果有私有變數不希望讓外部使用者,或者是被繼承的類別使用的可以使用
`__
class Animal:
name = ''
__private = ''
def __init__(self, name):
self.name = name
def walk(self):
print('walking')
def eat(self):
print('eating')
多型
接承上述例子,在多建立一個class繼承上述的Animal並實作
實作來執行,請見以下例子:eat()
`跟
`walk()
`之後當實體物件以Dog產生則其
`eat()
`跟
`walk()
`會依據Dog的實作來執行,若以新的class來產生實體則會依據新class的
`eat()
`跟
`walk()
class Duck(Animal):
def __init__(self, name):
super().__init__(name)
def walk(self):
print('{0} using two foot walk'.format(self.name))
def eat(self):
print('{0} eat worm'.format(self.name))
animal = Dog('A')
animal = Duck('A')
animal.eat()
animal.walk()
結果會是顯示以下內容:
A using two foot walk
A eat worm
抽象
抽象的表現是為實作的class不能產生實體,而該class僅是定義一個模板告訴實作者要實作什麼內容,儘管Python根本上沒有修飾詞可以宣告抽像類別,但是仍可透過擴充函式庫來做到,待後續再補充相關資料。
小結
透過本章的說明希望各位讀者們可以對Python的OOP有更進一步的了解。在說完OOP已經方法後下一章要介紹另一個可以把程序寫的更簡潔的裝飾器,在說明裝飾器後會再針對類別的進階內容再作補充,敬請期待。