上節課我們學習了什么是面向對象。在面向對象里有類和實例兩個概念。類是模板,實例是按照這些模板生成的一個個具體對象。
## 什么是繼承
這節課我們來學習繼承和重寫,咱們還是看生活中的例子。我們知道,世間的各種生物都是有細胞演化過來的。咱們來推演一下這個過程(參考資料,為了簡化編程模型,相關生物概念做了一些模糊:
https://zh.wikipedia.org/wiki/%E7%94%9F%E5%91%BD%E6%BC%94%E5%8C%96%E5%8E%86%E7%A8%8B
https://www.coursera.org/lecture/shengwu-yanhua/12-2-sheng-ming-qi-yuan-de-jie-duan-shang-1E923)

在大約40億年前,地球產生了細胞,從此產生了生命。細胞具有大小、年齡屬性;細胞的移動方式游動。
在大約10億年前,細胞演化出了兩種形態,植物和動物,我們來分別看看一下這兩種生物。
植物因為是從細胞演化(繼承)過來的,所以也擁有大小和年齡的屬性。植物的移動方式我們人類比較難觀察到,植物通過根從土壤里吸收養分輸送到葉子。這個過程我們簡化成叫吸收養分吧。
動物也是從細胞演化(繼承)過來的,所以也擁有大小和年齡的屬性。動物的移動方式有很多種,我們就簡化成走吧。
在上面的例子里,細胞是一個類,植物也是一個類。細胞和植物之間就是繼承關系。植物繼承自細胞;同理,動物也是繼承自細胞。
下面,我們用python代碼來演示一下繼承。
## python中的類繼承

首先,我們定義一個細胞類:
~~~
class Cell:
def __init__(self):
self.size = 0
self.age = 1
def move(self):
return '游動'
~~~
那我們怎么來表達植物繼承自細胞呢?看代碼:

~~~
class Plant(Cell):
pass
plant = Plant()
print(plant.size)
print(plant.move())
~~~
我們在類的定義中,傳入我們要繼承的類就可以了。一個類還可以繼承多個類,每個類之間用空格分開。
因為Plant 繼承了 Cell ,所以plant就自動擁有了 size、age屬性和move方法。
咱們再來寫一下動物的代碼:

~~~
class Animal(Cell):
pass
animal = Animal()
animal.size = 1
print(animal.size)
print(animal.move())
~~~
## 方法重寫
我們知道,每個實例有自己的屬性,我們單獨更改某個屬性的值。那我們怎么更改實例的方法呢?
上面說了,植物的移動方式是*吸收養分*、動物的移動方式是*走*。咱們怎么讓植物和動物擁有自己的*move*方法呢?我們只需要重新在`Plant`和`Animal`類里定義一下這個方法就好了。看代碼:
~~~
class Plant(Cell):
def move(self):
return '吸收養分'
class Animal(Cell):
def move(self):
return '走'
plant = Plant()
print(plant.move())
animal = Animal()
print(animal.move())
~~~
怎么樣?是不是很簡單。面向對象是很核心的編程概念,下節課,我們通過一些案例來看在具體的項目中怎么使用面向對象。
**阿達老師-孩子身邊的編程專家**
- 課程介紹
- 搭建環境
- 什么是計算機
- 程序是怎么運行的
- 安裝python
- 項目實例-安裝IDE
- 變量和簡單數據類型
- 數據&變量
- 數字
- 字符串
- 布爾類型
- 項目實例
- 容器-列表
- 容器
- 列表
- 項目實例
- 容器-字典
- 定義字典
- 項目實例
- 數據類型總結
- 條件語句
- python條件語句
- 項目實例
- 循環語句
- for循環
- while循環
- 項目實例
- 函數
- 5.0函數定義
- 5.2函數實戰
- 6.文件系統
- 6.1 文件系統介紹&python查找文件
- 6.2 用python讀寫文件
- 7. python操作時間
- 8.面向對象
- 8.1 類和對象
- 8.2 繼承和重寫
- 8.3 面向對象項目實戰
- 9 GUI編程
- 9.1 GUI基礎
- 9.2 備忘清單GUI版
- 10.網絡
- 10.1 網絡的發展
- 10.2 python http
- 11.web開發
- 11.1 web基礎&HTML
- 11.2 CSS&JavaScript
- 11.3 網頁計算器
- 11.3 網站開發實戰-播客搭建
- 11.3 python-web
- 12. 項目實戰-數據處理
- 13. 項目實戰-AI入門
- 13.1 環境搭建
- 心得
- 13.2 Tensorflow的瓜怎么吃
- 14 pygame
- 14.1 pygame Helloworld
- 14.4 pygame 動畫基礎 Animation
- 從0開始學python第14.5節 pygame 加載圖片和聲音
- 從0開始學python第14.6節 pygame.sprite(上)
- 14.7 pygame.sprite模塊(下)
- 14.8 pygame射擊游戲(一)
- pygame射擊游戲(二)
- 14.8 pygame射擊游戲(三)
- 14.8 pygame射擊游戲(四)
- 14.8 pygame射擊游戲(五)