我们洗衣服时,并不会研究洗衣机内部的工作原理。
面向对象就是将编程当成是一个事物,对外界来说,事物是直接使用的,不用去管他内部的情况。而编程就是设置事物能够做什么事。
类和对象的关系
面向对象编程的2个重要组成部分:类和对象。
我们先设计图纸,再制造一台洗衣机。类就是图纸,对象就是洗衣机。
类和对象的关系:用类
去创建(实例化)一个对象
。
类
是用来创建对象的抽象概念。对象
是类创建出来的真实事物。- 先有类,再有对象。
- 1个类,可以创建 N 个对象。
定义类
类名要满足标识符命名规则,同时遵循大驼峰命名
习惯。
# 定义一个类
class Washer():
def wash(self):
print('我会洗衣服')
创建对象
对象又名实例,创建对象的过程也叫实例化对象。
# 实例化一个对象,也就是创建对象
x = Washer()
# x对象调用实例方法
x.wash()
self
self 指的是调用该函数的对象。打印对象和self得到的结果是一致的,都是当前对象的内存中存储地址。
打印对象和打印 self 得到同一个内存地址,所以self指的是调用该函数的对象(图中实例化一个对象后赋值给“洗衣机”,“洗衣机”就是调用函数的对象)。
1个类,可以创建 N 个对象。
1个类创建多个对象后,self地址不同。
添加、获取对象属性
类外面添加对象属性
语法: 对象名.属性 = 值
类外面获取对象属性
语法: 对象名.属性
类里面获取对象属性
语法: self.属性名
魔法方法 __init__
面向对象中,__xx__()
这样的写法叫魔法方法,一般是具有特殊功能的函数。
__init__
- init 方法的作用:初始化对象。
- 在创建一个对象时 init 被默认调用,不用手动调用。
- init 中的
self
参数,不需要开发者传递,自动把当前的对象引用传递过去。
带参数的 __init__
:
一个类可以创建多个对象,可以使用参数对不同对象设置不同初始化属性。
__str__
当使用 print 输出对象的时候,默认打印对象的内存地址。如果类定义了 str 方法,那么就会打印从在这个方法中 return 的数据。
__del__
对象删除后,默认调用 __del__
方法。
应用:烤地瓜
# 定义一个类
class 地瓜类:
def __init__(self):
self.被烤时间 = 0
self.生熟状态 = '生的'
self.调料列表 = []
def 烤地瓜(self, time):
# 烤地瓜的方法
self.被烤时间 += time
if 0 <= self.被烤时间 < 3:
self.生熟状态 = '生的'
elif 3 < self.被烤时间 < 5:
self.生熟状态 = '半生不熟'
elif 5 < self.被烤时间 < 8:
self.生熟状态 = '刚刚好熟了'
elif self.被烤时间 >= 8:
self.生熟状态 = '烤糊了'
def __str__(self):
return f'地瓜烤了{self.被烤时间}分钟,{self.生熟状态}'
d1 = 地瓜类()
print(d1) # 地瓜烤了0分钟,生的
d1.烤地瓜(2)
print(d1) # 地瓜烤了2分钟,生的
d1.烤地瓜(2)
print(d1) # 地瓜烤了4分钟,半生不熟
d1.烤地瓜(3)
print(d1) # 地瓜烤了7分钟,刚刚好熟了
d1.烤地瓜(2)
print(d1) # 地瓜烤了9分钟,烤糊了
# 定义一个类
class 地瓜类:
def __init__(self):
self.被烤时间 = 0
self.生熟状态 = '生的'
self.调料列表 = []
def 烤地瓜(self, time):
# 烤地瓜的方法
self.被烤时间 += time
if 0 <= self.被烤时间 < 3:
self.生熟状态 = '生的'
elif 3 < self.被烤时间 < 5:
self.生熟状态 = '半生不熟'
elif 5 < self.被烤时间 < 8:
self.生熟状态 = '刚刚好熟了'
elif self.被烤时间 >= 8:
self.生熟状态 = '烤糊了'
def 添加调料(self, 调料名):
# 将调料添加表调料列表
self.调料列表.append(调料名)
def __str__(self):
return f'地瓜烤了{self.被烤时间}分钟,{self.生熟状态},添加了调料{self.调料列表}'
d1 = 地瓜类()
print(d1) # 地瓜烤了0分钟,生的,添加了调料[]
d1.烤地瓜(2)
print(d1) # 地瓜烤了2分钟,生的,添加了调料[]
d1.烤地瓜(2)
print(d1) # 地瓜烤了4分钟,半生不熟,添加了调料[]
d1.添加调料('盐')
print(d1) # 地瓜烤了4分钟,半生不熟,添加了调料['盐']
d1.添加调料('油')
print(d1) # 地瓜烤了4分钟,半生不熟,添加了调料['盐', '油']