寫在前面
類的這個概念在顯示生活中很容易找到生動的例子。
比如說,在數學中,數字分爲整數、小數、複數這三種類型。不同類型的數據運算方法是不同的。這與計算機中的基本類型是很相似的。因此,不要把類想的遙不可及,歸根結底類就是對一類具有相同屬性和行爲的對象進行分類的結果。
在面向對象編程時,這種概念便被借用了。我們可以通過類,定義我們自己的數據類型,並賦予其相應的屬性和方法。
class Person:
def __init__(self, name, age):
self.name = name
self.age =age
def work(self):
print(self.name, 'working')
def walk(self):
print(self.name, 'walking')
xiaoMing = Person('小明', 20)
xiaoFang = Person('小芳', 22)
xiaoMing.work()
xiaoFang.work()
但是我們會遇到這樣的問題。當我們用xiaoMing.work()的時候,Python是怎麼知道是xiaoMing在調用呢?關鍵點就在於self。xiaoMing調用時,將xiaoMing這個的地址賦值給了self,那麼self便指向了當前調用對象。同樣地,對於xiaoFang來講也是同樣的道理。因此,我們得出結論:Python中的self在調用過程中指向當前調用對象。
多態是減少代碼重複性和明晰程序邏輯的非常有用的方法。一般情況下,實現多態的方法有兩種,override(重寫)和overload(重載)。
Python | Python中沒有重載overload,因爲python中的函數形參個數是變化的。 | Python中的override,在繼承中子類的方法可以覆蓋父類的方法 |
C++ | C++中有重載,重載函數的函數名相同,函數形參的個數或類型不同 | C++中通過虛函數(虛表)來實現override |
Java | Java中有重載,與C++相同 | Java中override,與Python中的重寫相同。 |