## 什么是面向对象
之前我们学习了函数,通过函数将一些特定的逻辑封装起来。这种将代码组织起来的方式也叫过程式编程。我们今天学习的面向对象编程则将程序做了更高维度的封装,用人类更容易理解的方式编程。
## 类&实例
中国道德经有一句话:*道生一,一生二,二生三,三生万物*,讲的是世间的万物都是从特定的模板里生出来的。这个模板就是类,生出来的东西就是对象。
我们来看几个案例:
![](https://s1.ax1x.com/2018/08/30/PjrfEV.png)
宠物狗有很多种:泰迪、金毛、哈士奇 都属于狗科动物。狗本身是一个模板(类)。狗作为一个**类**,拥有尾巴、腿、耳朵等身体**器官**;可以执行跑、叫等**动作**。泰迪、金毛、哈士奇 是从狗模板“生出来的”,因此它们也拥有这些属性。泰迪、金毛、哈士奇 就是狗这个类的**实例**。
![](https://s1.ax1x.com/2018/08/30/Pjro34.png)
汽车也有很多种,公交车、轿车、越野车都属于汽车。汽车本身是一个模板(类),汽车作为一**类**,拥有方向盘、发动机、车身、最大时速等**属性**;可以执行发动、变方向、鸣笛等**方法**。公交车、轿车、越野是从汽车模板“生出来”的,因此,他们也拥有这些构造。公交车、轿车、越野车就是汽车这个类的**实例**。
看过上面这两个例子,对什么是是类、什么是实例有没有一个形象的了解呢?下面我们看看用python怎么表达类和实例吧。
## 在python里定义类
在python中定义一个类可以参照下面的语法:
~~~
class Dog:
pass #类代码
~~~
我们用 class关键字定义一个类,注意类的名字用首字母大写的单词来组成,为什么要首字母大写呢?我们下面会解释。
## python里对类实例化
定义好类,接下来通过类来构建实例了。看代码:
~~~
teddy = Dog()
print(teddy)
~~~
我们定义了一个变量`teddy`,Dog()方法就是定义一个类的实例。`print(teddy)`会输出 `<__main__.Dog object at 0x1041019e8>`
我们把类的首字母大写,就不会把类和实例搞乱了。
## 实例属性
类在定义好后,会拥有一个__init__方法。这个方法是当依照这个类构建实例的时候被调用的,我们来看代码:
~~~
class Dog:
def __init__(self):
# 尾巴、腿、耳朵
self.tail = 'small'
self.leg = 'long'
self.ear = 'stand'
teddy = Dog()
print(teddy.leg)
~~~
在__init__方法里,有一个self参数,这个参数用来表达实例本身。那里面的 `self.tail`、`self.leg` 就是实例属性了。类的每个实例有自己的属性。比如泰迪的尾巴是短的、耳朵是下垂的。而哈士奇的尾巴是长的,尾巴是立起来的。
## 方法
除了属性外,类还有方法。我们来看代码:
~~~
class Dog:
def __init__(self, name):
# 尾巴、腿、耳朵
self.tail = 'small'
self.leg = 'long'
self.ear = 'stand'
self.name = name
def call(self):
print("汪汪", self.name)
teddy = Dog('teddy')
husky = Dog('husky')
teddy.call()
husky.call()
~~~
`call` 函数是类的方法,每个实例都会有这个方法。方法定义中会有默认的self参数,用来代表实例自己。这个代码还可以印证每个实例有自己的属性。
## 类属性
除了实例属性外,还有类属性。看代码:
~~~
class Dog:
dogCount = 0
def __init__(self, name):
# 尾巴、腿、耳朵
self.tail = 'small'
self.leg = 'long'
self.ear = 'stand'
self.name = name
Dog.dogCount += 1
def call(self):
print("汪汪", self.name)
teddy = Dog('teddy')
teddy.call()
print(Dog.dogCount)
husky = Dog('husky')
husky.call()
print(Dog.dogCount)
~~~
dogCount 是Dog类的属性,类属性从属于类。每次改版类属性的值都会反映的所有的实例上。
![](http://www.runoob.com/wp-content/uploads/2016/05/animals.png)
这节课我们讲了面向对象,面向对象是编程里很核心的概念。一定要能够有清晰的理解,怎么样,小朋友们掌握了吗?
**阿达老师-孩子身边的编程专家**
```
class Yingxiong():
def __init__(self):
self.zhanji = ''
self.xueliang = 2000
self.jineng = ''
def gongji(self):
print('平A')
yase = Yingxiong()
yase.xueliang = 4000
yase.gongji()
anqila = Yingxiong()
anqila.xueliang = 2000
```
- 课程介绍
- 搭建环境
- 什么是计算机
- 程序是怎么运行的
- 安装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射击游戏(五)