面向对象
类和对象
纯万物皆对象
面向对象的思想
面向对象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 = numberclass 通讯录: def __init__(self): self.users = [] def add_user(user): self.users.append(user) t = 通讯录()t.add_user(用户('胡承龙','1333333333'))