上节课我们学习了什么是面向对象。在面向对象里有类和实例两个概念。类是模板,实例是按照这些模板生成的一个个具体对象。
## 什么是继承
这节课我们来学习继承和重写,咱们还是看生活中的例子。我们知道,世间的各种生物都是有细胞演化过来的。咱们来推演一下这个过程(参考资料,为了简化编程模型,相关生物概念做了一些模糊:
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)
![](https://pic2.zhimg.com/80/bfa1e4329632294d000adac6548043f5_hd.jpg)
在大约40亿年前,地球产生了细胞,从此产生了生命。细胞具有大小、年龄属性;细胞的移动方式游动。
在大约10亿年前,细胞演化出了两种形态,植物和动物,我们来分别看看一下这两种生物。
植物因为是从细胞演化(继承)过来的,所以也拥有大小和年龄的属性。植物的移动方式我们人类比较难观察到,植物通过根从土壤里吸收养分输送到叶子。这个过程我们简化成叫吸收养分吧。
动物也是从细胞演化(继承)过来的,所以也拥有大小和年龄的属性。动物的移动方式有很多种,我们就简化成走吧。
在上面的例子里,细胞是一个类,植物也是一个类。细胞和植物之间就是继承关系。植物继承自细胞;同理,动物也是继承自细胞。
下面,我们用python代码来演示一下继承。
## python中的类继承
![](https://pic2.zhimg.com/v2-2701f2f5ebc1b623ed8684f4a2ed65bd_1200x500.jpg)
首先,我们定义一个细胞类:
~~~
class Cell:
def __init__(self):
self.size = 0
self.age = 1
def move(self):
return '游动'
~~~
那我们怎么来表达植物继承自细胞呢?看代码:
![](http://i.epochtimes.com/assets/uploads/2016/04/1604172216522669-600x400.jpg)
~~~
class Plant(Cell):
pass
plant = Plant()
print(plant.size)
print(plant.move())
~~~
我们在类的定义中,传入我们要继承的类就可以了。一个类还可以继承多个类,每个类之间用空格分开。
因为Plant 继承了 Cell ,所以plant就自动拥有了 size、age属性和move方法。
咱们再来写一下动物的代码:
![](http://pic.90sjimg.com/design/00/64/37/06/59265caa7607d.png)
~~~
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射击游戏(五)