面向对象
类和对象
纯万物皆对象
面向对象的思想
面向对象OOP:面向对象的编程
利用对象的思想解决问题
第一个纯面向对象的语言:small talk
比较出名的面向对象语言:JAVA
1+2=3
对于java就是简单地运算
对于small talk和python来说:对1这个对象运行+方法,参数是2,得到3这个对象
纯万物皆对象
面向过程:洗衣服---水管---螺丝---钢铁---玻璃---------洗衣机---洗衣服
面向对象:谁家有洗衣机------拿来用(不掏钱)
1. 有什么:属性
2. 能做什么:方法
小狗:
属性:
体重
年龄
四个腿
速度
颜色 #000000~#999999
血统
方法:
能叫
吃
睡
拆家
掉毛
讲笑话
排泄
对象=属性+方法
1. 属性可以由小对象构成
2. 相对抽象的属性(抽象的内容,也是对象)
对象之间彼此调用
1. 方法被别人调用
2. 调用别人的方法
3. 自己调用自己的方法
如何建立解题思路
# 现实世界
从北京到上海
1. 面向过程
将过程细化,细化到不能再细化,任何情况全部都要考虑在内,所有方案都要实现
打车去机场,安检,上飞机,找座位,关手机,系安全带,放饭,厕所,下飞机。
(如果飞机出事儿了:降落伞,直接跳,救生衣,急救)
2. 面向对象的思路:
只考虑对象
使用东航白金卡特权---空姐、空少---下飞机
如果出事儿了:等机长
1. 选取对象:航空公司(航空公司负责飞机上的相关所有事物)
2. 调用方法:交通运输、上飞机、下飞机......
1. 找到合适的对象
2. 调用合适的方法
涡轮洗衣机
滚筒洗衣机
搓衣板
手搓
硬泡
面向对象在计算机中的使用
核心:在计算机中模拟现实世界,从而解决现实世界的问题
下载峰值:10M每秒
上传速度:1M每秒
现实:
1. 沟通
2. 购物
3. 吃饭
4. 娱乐
计算机:
1. QQ 微信 陌陌 钉钉
2. 淘宝 京东 并夕夕 国美 苏宁易购 唯品会
3. 美团 饿了么 百度外卖
4. 原神 扫雷 慕课网 leetcode
计算机中的对象是在内存中的一块存储空间,属性和方法都是该内存中的数据
学生对象:
现实中:
学生名字:小明
学生年龄:18
学生的性别:男
学生的学号:123
学习的方法
python:
name = '小明'
age = 18
gender = 'male'
id = 123
def learn():
print('小明爱学习')
图书管理系统:
现实:
书架、书、图书管理员
计算机:
管理员对象、用户对象、数据库对象、图书对象
面向对象的思想,为生活,编程提供了优质的解题思路
可以简化流程,让复杂的需求更加容易实现
面向对象的特点:
1. 各司其职
2. 弱耦合性:
强耦合:对象之间关系紧密
弱耦合:对象之间关系松散
面向对象中,对象之间的耦合关系尽量弱化。
3. 可重用性:
一处实现,处处使用
框架:Spring、Scrapy、Requests
4. 可扩展性:
在原有的功能上,增加额外功能
手机:大哥大+BB机--->小灵通(和弦铃声)--->iphone3彩色大屏触屏---iphone4 3G
AI人工智能芯片、AIN摄、全面屏、OLED、屏下指纹、面部识别、虹膜识别.....
类
1. 类是对象一个共性的抽象
2. 是客观对象在人类脑中的主观反应
3. 类是一个对象的模板
类 = 属性+方法
语法:
关键字:class 定义一个类
class 类名: #首字母大写
属性
方法
1. 属性的分类
1. 类属性
1. 位置:直接定义在类中的属性
2. 类创建的所有对象都有这些属性,并且属性值相同
3. 类属性属于类
4. 类属性一旦发生变化,则所有的对象也跟着变化
牵一发而动全身
5. 可以直接通过,类名.新属性=新值 创建类属性
6. 类属性的作用范围:整个类
根据当前类生成的所有对象
2. 实例属性
1. 属于实例对象的属性---称之为实例属性
2. 创建在方法内部的属性是实例属性
a:self.属性名=值
b:直接通过,实例对象.新属性名=新值
3. 实例属性属于实例对象,其他人不能使用
4. 实例属性改变,不会影响其他实例对象,更不会影响类
5. 实例属性如果要使用,必须创建实例对象
6. 如果实例属性和类属性发生命名冲突,在当前实例对象的范围内,覆盖类属性
7. 实例属性的作用范围:当前的实例对象
2. 实例:
通过类创建的对象称为实例
1. 实例属性:
各个实例各自拥有,相互之间不影响,也不会影响类
2. 类属性:
全类共有,有且只有一份,属于类的属性,类属性更改,则影响所有的实例对象。
1. 结构
1. 方法的声明
def 方法名(self):
内容
2. 方法的实现:
内容
3. 返回值:和函数一样
2. 方法的使用
通过.的方式
3. 通过实例对象调用方法
自动传递self参数
4. 方法的使用,必须创建实例对象
有个别情况,比如一个方法是类方法
5. 方法如果需要传递多个参数,则用逗号隔开
函数中的参数类别,在方法中依然适用
1. self指代当前的实例对象(类)
2. 在通过实例对象调用方法时,python会自动的将当前的对象传递给self
谁是当前对象:谁调用该方法,谁就是当前对象
3. self参数的目的:区分不同的实例对象
4. self仅仅是一个普通的变量而已
5. 自动传入当前对象,默认传递给第一个参数
习惯上,第一个参数,写为self
1. __init__(self)
初始化方法
2. 创建实例的时候,自动调用,不需要手动调用
3. 创建对象的时候,需要:类名(构造方法的参数)
4. init方法常常用于,在创建对象时初始化实例属性
init方法就是私人订制
5. 一个类中,如果没有构造方法,在创建对象的时候,会调用父类的构造方法
如果有构造方法,则调用该类的构造方法
如果没有,从父类中调用
6. 构造方法的返回值,必须是None
class 用户:
def __init__(self,name,number):
self.name = name
self.number = number
class 通讯录:
def __init__(self):
self.users = []
def add_user(user):
self.users.append(user)
t = 通讯录()
t.add_user(用户('胡承龙','1333333333'))