学习目标
- 理解面向对象
- 类和对象
- 添加和获取对象属性
- 魔法方法
一 理解面向对象
- 面向对象是一种抽象的编程思想 ,很多编程语言都有的一种思想
- 面向对象是把一组数据结构和处理他们的方法组成对象,把具有相同行为的对象归纳成类,通过封装隐藏类的内部细节,通过继承使类得到泛化,通过多态实现基于对象类型的动态分派。
封装 继承 多态
二 类和对象
面向对象的两个正要做成部分:
类 和 对象
[关系] : 用类去 创造一个对象.
2.1 理解类和对象
2.1.1 类
类是具有相同特征和行为的事物的统称,不是真实存在的事物.
- 特征 即是属性
- 行为即是方法
2.1.2 对象
对象是用类创造出来的真实事物
注意 :
开发中 先有类,再有对象
定义类,创建对象 print(对象名) 输出 内存地址
print(haier) # 打印 出内存地址,说明对象创建成功
=> <__main__.类洗衣机 object at 0x0000000001241BA0>
2.2 面向对象的实现方法
2.2.1 定义类
- 语法
class 类名():
代码
…
注意 类名,一般要遵循大驼峰 规则
2.2.2 创建对象
- 语法
对象名=类()
2.2.3 体验
- 需求 :洗衣机洗衣服
- 思路: 先定义类 然后用类创建对象
三个步骤
1 定义类
2 创建需求
3 验证
- 代码
# 定义类
class 类洗衣机():
def 功能(self):
print("能洗衣服")
# 创建对象
海尔=类洗衣机()
# 验证
#打印haier 对象
print(haier) # 打印 出内存地址,说明对象创建成功
=> <__main__.类洗衣机 object at 0x0000000001241BA0>
# 使用 功能 实例方法/函数 --- 对象名.功能():
海尔.功能()
=> 能洗衣服
2.2.4 self
self 是 调用函数的对象
1 一个类可以创建多个对象,
2 多个对象都调用类的函数, 但self的地址不同.
三 添加和获取 对象的属性
属性 即特征,比如 洗衣机的 长\宽\重量 自然属性
对象属性既可以在类的外面添加和获取,也可以在 类的里面添加和获取
3.1 类的外面添加 对象属性
- 语法
对象名.属性名=值
- 体验
海尔.高=500
海尔.宽=800
3.2 类的里面添加
- 语法
属性名=值
- 体验
class 类洗衣机():
高=500
宽=600#创建对象
海尔=类洗衣机
3.3 在类的外面获取对象属性
print(海尔.宽) # 打印 出内存地址,说明对象创建成功
=>600
3.4 在类的里面获取对象属性
- 语法
self.属性名
- 体验
# --*coding:utf-8*--
# 定义类
class 类洗衣机():
# 类里面获取实例属性
def print_info(self):
#self.属性名
print(self.宽)
print(self.高)
# 创建对象
海尔=类洗衣机()
# 添加实例属性
海尔.高=500
海尔.宽=800
# 对象调用实例方法
海尔.print_info()
=>800
=>500
四 魔法方法
在Python里面 , xx()的函数叫 魔法方法, 指有特殊功能的函数
4.1 init()
4.1.1 体验 init()
思考 洗衣机的高宽是天生就有的属性, 那么在生产过程中就赋予这些属性
==init(),的作用: 初始化对象 ==
- 语法
def init(self):
self.宽=500
self.高=600
- 思路
1 定义 类
init魔法方法:宽和高
添加实例方法 : 访问实例属性2 创建对象
3 验证成功抵用实例方法
- 体验
# --*coding:utf-8*--
# 定义类
class 类洗衣机():
# 定义__init__().添加实例属性
def __init__(self):
#添加实例属性,
self.宽=600
self.高=500
def 打印信息(self):
#类里面调用实例属性
print(self.宽,self.高)
# 创建对象
海尔=类洗衣机()
# 验证
海尔.打印信息()
注意:
- init()方法, 在创建对象是 不需手动调用 ,会被自动调用的
- init(self)中的self参数,不需要开发者传递 , 自动把当前对象的引用传递过去
4.1.2 带参数的 init()
一个类可以创建不同的对象,如何对不同的对象设置不同的初始化属性
- [思考] 一个洗衣机类, 可以创建 海尔 海信 两种洗衣机, 如何设置 他们的 不同的初始化属性
- 语法
init(self,宽,高)
- 体验
# --*coding:utf-8*--
# 定义类
class 类洗衣机():
# 定义__init__().添加实例属性
def __init__(self,宽,高):
#添加实例属性,
self.宽=宽
self.高=高
def 打印信息(self):
#类里面调用实例属性
print(self.宽,self.高)
# 创建对象
海尔=类洗衣机(500,300)
海信=类洗衣机(400,500)
# 验证
海尔.打印信息()
海信.打印信息()
4.2 str(): 一般返回一些解释说明的文字
- 当使用print输出对象名的时候, 默认的打印对象的看不懂的 内存地址.
print(haier) # 打印 出内存地址,说明对象创建成功
=> <__main__.类洗衣机 object at 0x0000000001241BA0>
-
如果 类定义了__str__()方法, 就会return的出,解释\说明的文字 ,或者解释 类的属性,或者是类的状态
- 代码
# --*coding:utf-8*--
# 定义类
class 类洗衣机():
def __init__(self,宽,高):
self.宽=宽
def __str__(self):
return (f"这是的说明书")
海尔=类洗衣机(500,300)
print(海尔)
=>这是的说明书
4.3 del():
当删除对象是, Python会自动调用del方法
五 综合应用
面向对象 通用步骤
1 分析需求
用的时间 ===> 地瓜状态
2 步骤分析
上归类 地瓜类
2.1 定义类 (属性和方法)
2.1.1 基本属性 初始化属性 __init__(self): 2.1.2 方法 /函数 def 函数名(): 2.1.3 显示信息/return状态 __str__(self):
2.2 创建对象 ,测试实例属性和实例方法
5.1 烤地瓜
场景描述:
烤地瓜 ,一会拿出来看看, 如不熟,就再放里面烤,一会再看看 ,累加
时间和状态
5.1.1 需求
需求主线:
1 被烤的时间和对应状态
0-5分钟 生的
5-10分钟 熟了
10分钟以上 糊了
2 添加调料:
5.1.2 步骤分析
需求涉及 一个事物: 地瓜 -->地瓜类 上归类
5.1.2.1 定义类
面向对象 通用步骤
1 分析需求
用的时间 ===> 地瓜状态
2 步骤分析
上归类 地瓜类
2.1 定义类 (属性和方法)
2.1.1 基本属性 初始化属性 __init__(self): 2.1.2 方法 /函数 def 函数名(): 2.1.3 显示信息/return状态 __str__(self):
2.2 创建对象 ,测试实例属性和实例方法
# --*coding:utf-8*--
"""
[分析需求]
1\根据烤地瓜的时间 ,累计时间判断地瓜的状态
2\根据加入的调料,输出地瓜的味道
[步骤分析]
1\定义类 初始化属性 方法/函数 输出状态信息
2\创建对象, 测试实例属性和实例方法
"""
# 1\ 定义类
class 地瓜():
# 初始化属性
def __init__(self):
self.时间=0
self.状态="生的"
self.味道=[]
# 实例方法/函数
def 烤地瓜(self,时间):
self.时间+=时间
if 0<=self.时间<5:self.状态="生的"
elif 5<=self.时间<10:self.状态="熟了"
elif 10<=10:self.状态="糊了"
def 加调料(self,调料):
self.味道.append(调料)
def __str__(self):
return f"对象地瓜的烤了{self.时间},{self.状态},味道{self.味道}"
# 创建对象
红地瓜=地瓜()
print(红地瓜) #对象地瓜的烤了0,生的,味道[]
红地瓜.烤地瓜(7)
print(红地瓜) #对象地瓜的烤了7,熟了,味道[]
红地瓜.加调料("红糖")
print(红地瓜) # 对象地瓜的烤了7,熟了,味道['红糖']
5.2 搬家具
5.2.1 需求
将小于房子剩余面积的家具 放到房子里
5.2.2 步骤分析
上归类 房子 家具
5.2.2.1 定义类
- 房子类
– init() 初始化属性 位置 占地面积 剩余面积
– def () 剩余面积计算, 对比是否能放的下
– str () return 出去是否放的下 - 家具 类
– init () 初始化面积 面积
关键问题:跨类的参数传递 item
5.2.2.2 创建实例对象, 验证实例属性和方法
#--*coding=utf-8*--
"""
[需求] 把小于房子剩余面积的家具搬进房子
步骤
1\ 定义类, 房子 和 家具初始化属性
2\方法/函数 ①判断剩余面积 ②判断是否放的下
3\创建对象,检验实例属性和方法
"""
# 定义类
class 家具类():
def __init__(self,家具名称,家具面积):
self.家具名称=家具名称
self.家具面积=家具面积
class 房子类():
def __init__(self,位置,占地面积):
self.位置=位置
self.占地面积=占地面积
self.剩余面积=占地面积
self.家具列表=[]
def 搬家具(self,item):
if self.剩余面积>=item.家具面积:
self.家具列表.append(item.家具名称)
self.剩余面积-=item.家具面积
else:print("盛不下了")
def __str__(self):
return f"位于{self.位置}的房子,占地{self.占地面积},剩余{self.剩余面积},现有家具{self.家具列表}"
# 创建对象
床=家具类("双人床",6)
桌子=家具类("餐桌",3)
东城102=房子类("长安街12号",140)
print(东城102)
东城102.搬家具(床)
print(东城102)
东城102.搬家具(桌子)
print(东城102)
六 小结 面向对象
-
组成部分
– 类
class 类名()
代码
– 对象
对象名=类名()
-
添加对象属性
– 类里面
self.属性名=值
– 类外面
对象名.属性名=值
-
获取对象属性
– 类里面
self.属性名
– 类外面
对象名.属性名
-
魔法方法
__init__() :初始化属性 __str__() :返回对象信息,状态 __del__() :删除对象的调用
[版权声明] 文字整理 b站视频 https://www.bilibili.com/video/BV1kT4y1971R?p=27
原作者不明,侵删