==>封装,继承,多态
## 目标:面向对象,网络编程,多任务,数据库
## 一、 理解面向对象
面向对象是一种抽象化的编程思想
~~~如洗衣服
途径:手洗 机器洗
手洗:每一个步骤都需要自己一步一步操作 ==》很麻烦
机器洗:交给洗衣机 烘干 脱水 搓洗用不同的函数实现 ==》简单简洁
总体而言 面向对象作用是简化代码
(加强代码的复用性,像是每个函数中都要输出1~10,那把这个循环封装在函数中则下次直接调用)
~~~
总结:面向对象就是将编程当成一种事物,对于外界,事物是可以直接使用的,不用管其内部的具体实现步骤,而我们编程则是设置这个事物可以做什么 (洗衣机类普通都有烘干,脱水功能,则我们写好它的功能,则后续的再用该功能则就行,不用重新写)
eg:list.append(1),该append也是一个函数,而我们是直接知晓其功能,并未知晓其内部如何存储的
即该事物(函数)可以直接拿来用
## 二、类和对象
思考:洗衣机对象从哪里来?
生产出来
思考:怎么生产出来的?
画图======= 》洗衣机======== 》洗衣服
画图即要在空白的基础上创造新的东西,比如要有数据和和一些功能,则是编程前要安排好,由画图======= 》洗衣机都要完成
面向对象编程中两个最重要的组成部分: 类 和 对象
类和对象的关系:类产生对象 ===== 》即“实例化”
(类是抽象化的对象,具有一类对象相同的特点;对象是实例化的类,在类的统一特点后添加自己独有的特点,有些像要用装饰器时,在要装饰的函数外面加上其他的功能)
## 2.1理解类和对象
## 2.1.1类
图纸里面有什么:数据 长宽高 功能: 洗衣服 烘干 脱水
数据: 就是变量======== 》类中叫做属性
功能: 就是函数======== 》类中叫做方法
(因为类是抽象的,其叫法也有不同)
类就是一系列具有相同**特征**和**行为**的事物的统称,是一个抽象化概念,不是真实存在的事物。
- 特征即是属性(变量,数据)
- 行为即是方法(函数,功能)== 》行为即将如何将数据进行处理
## 2.1.2对象
对象是就类的基础上创建的真实存在的事物
注意:开发中 先有类,再有对象
**类是抽象的,对象是具体的**
一个类可以有多个对象
类是一系列对象的集合
**类和类之间行为(功能/方法)不同,对象和对象之间数据不同(其行为相同)**
## 2.1.3总结
类像是对世间万物的一些大类的事物的总结,如狗吃屎,有尾巴;人吃粮食,无尾巴,是虚无中抽象化出来的一些方法与数据
而对象则是满足类中那些特征的具体的事物,而其身上往往还带有其自身的特点
~~~
宝马车 类(因为有多种系列) 抽象的
我的宝马车 对象 具体的
~~~
## 2.2.1定义类
- 语法
```
#定义函数
def 函数名():
函数体
#定义类
class 类名():
代码
```
注意:类名要满足标识符规则,同时遵循**大驼峰命名规则**,但其内部的方法(即函数命名不能用大驼峰命名规则,也怕搞混)
eg:base user id
大驼峰命名规则:BaseUserId
小驼峰命名规范:base_user_id
- 代码
```python
class Washer():
def wash(self): #实例方法(即功能,函数,行为)
print(洗衣服==='')
```
## 2.2.2创建对象
- 语法:
对象名=类名() # 类的实例化
```python
#==画图纸==
class Washer():
def wash(self): #在类中叫实例方法/对象方法(即功能,函数,行为)
print(洗衣服==='')
#==根据图纸制作洗衣机== 创建对象
xiaotiane=Washer()
#==洗衣服==
#验证功能 ------对象名,实例方法名()
xiaotiane.wash()
```
与面向过程对比
```python
a=list()
#==》在面向过程中,这是赋值,但在面向对象中,这就是类的实例化,因为list()也是一个类名,而append也是一个属性
a.append() #==》对象名.实例方法(),即这就是实现功能
```
而往往更多的是我们编程中用已经封装好的类来定义新的类,以此提高代码的复用性以及实现新功能
## 2.2.3self
self指的是调用该实例方法的对象,即实例对象
```
#洗衣机 洗衣服
class Washer():
def wash(self): # 实例方法
print(self) # self指的是调用该方法的实例对象
print(洗衣服==='')
xiaotiane=Washer() 创建对象
print(xiaotiane) 打印xiaotiane的内存地址,即存放那个对象的空间
xiaotiane.wash() 这里打印的self等于上面的self
```
这里的self可以换,因为是形参,但约定俗成的就是self
**注意:命名文件不要用数字开头且不要有汉字,因为不能识别汉字的路径和数字开头的文件**
类和函数中写的只是定义,在调用时才会执行