前言
系列文章目录
视频及资料和课件
链接:https://pan.baidu.com/s/1LCv_qyWslwB-MYw56fjbDg?pwd=1234
提取码:1234
视频链接
根据视频进行整理
学习目标
- 理解面向对象
- 类和对象
- 添加和获取对象属性
- 魔法方法
1 理解面向对象
面向对象是一种抽象化的编程思想。
在面向对象的编程思想中,一个程序可以认为是一个世界,在这个世界中有各种各样的事物(每个事物即为一个对象),事物即程序所涉及的现实生活存在的物品或者生命等。
在面向对象的思想中,实现功能都像日常生活中使用物品完成某项工作一样,我们不用像结构化编程思想(可以认为一个动作一个指令)那样,可以不用关系物品的内部是如何构成的,使用物品时直接调用对应的功能即可。
以洗衣服为例:
结构化编程(手洗):
找盆 => 放水 => 加洗衣粉 => 浸泡 => 搓洗 => 拧干水 => 倒水 => 漂洗 => 拧干 =>晾晒
面向对象编程(机洗):
打开洗衣机 => 放衣服 => 加洗衣粉 => 按下开始按钮(调用洗衣机洗衣服的功能) => 晾晒
2 类和对象
上述洗衣服的案例可以得到,我们使用洗衣机洗衣服,其实就是在使用一个我们世界存在的事物完成对应的工作。洗衣机是一个事物,即现实存在的事物就是对象。
洗衣机的制造是根据洗衣机的制作图纸制造的,同理,对象的制造也需要一个对应的图纸,我们将制造对象的图纸称为类。
由此,我们可以认为,类就是制造对象的图纸,一个对象就是一个事物。
类和对象的关系:用类创建对象。
创建对象,又称为实例化。
2.1 理解类和对象
2.1.1 类
在洗衣机的制作图纸中,会标明洗衣机的尺寸大小,也会写明洗衣机的功能。
在程序中,洗衣机的尺寸大小等指标(特征),为变量;洗衣机的功能(行为)对应程序中的函数。
在面向对象中,类是对一系列具有相同特征和行为的事物统称,是一个抽象的概念,不是真实存在的事物。
在面向对象中,特征即属性;行为即方法。
类的作用:用来创建对象。
2.1.2 对象
对象是类创建出来的真实存在的事物,例如:上述例子中的洗衣机。
注意:先有类,再有对象。
先有洗衣机的制作图纸才能制造出洗衣机。
2.2 面向对象实现方法
2.2.1 定义类
语法:
class 类名(): 代码 ......
注意:类名要满足标识符命名规则,同时遵守大驼峰命名习惯。
类名后的括号中写的是继承的类。
2.2.2 创建对象
对象,也可以称为实例。
用类创建的对象会具有类中的所有属性与方法。
语法:
对象名 = 类名()
注意:先有类,才有对象。
2.2.3 体验类和对象
函数写在类中,为实例方法,实例就是对象,所以实例方法又叫对象方法。
实例方法的调用:
对象名.方法名()
""" 创建一个洗衣机 洗衣机的功能:洗衣服 """ # 定义洗衣机类 class Washer(): def wash(self): """ 洗衣机洗衣服的功能 :return: 无返回值 """ print('正在洗衣服...') # 创建洗衣机对象 -- 海尔牌洗衣机 haier = Washer() # 验证 # 打印创建的haier对象 print(haier) # 使用洗衣机的洗衣服功能 haier.wash()
2.2.4 self
self指的是调用该函数的对象。
""" 创建一个洗衣机 功能:洗衣服 """ # 定义洗衣机类 class Washer(): def wash(self): """ 洗衣机洗衣服的功能 :return: 无返回值 """ print('正在洗衣服...') print(self) # 创建洗衣机对象 -- 海尔牌洗衣机 haier = Washer() # 验证 # 打印创建的haier对象 print(haier) # 使用洗衣机的洗衣服功能 haier.wash()
在输出结果中,打印的两个内存地址(对象的内存地址和self的内存地址)一致,所以,self指的是调用该函数的对象。
2.2.5 一个类创建多个对象
在现实生活中,根据一个洗衣机图纸可以制造无数个一样的洗衣机。在面向对象的编程中,根据一个类也可以创建出无数个一个的对象,创建的对象的个数根据实际需要而定。
class Washer(): def wash(self): print('正在洗衣服...') print(self) haier1 = Washer() haier1.wash() print(haier1) haier2 = Washer() haier2.wash() print(haier1)
由结果可得:
一个类可以创建多个不同的对象;
self指的是调用该函数的对象。
3 添加和获取对象属性
对象的属性,即对象的特征,例如,洗衣机的宽、高、重量。
对象的属性既可以在类外面添加和获取,也能在类里面添加和获取。
给对象添加属性,是由于,不同的对象,会存在不同的特征。
如,海尔牌的洗衣机,存在不同尺寸的同一型号的洗衣机。
3.1 类外面添加对象属性
语法:
对象名.属性名 = 值
3.1.1 体验类外面添加对象属性
class Washer(): def wash(self): print('正在洗衣服...') haier1 = Washer() # 为对象haier1添加对象属性 # 宽度 haier1.width = 400 # 高度 haier1.height = 600
3.2 类外面获取对象属性
语法:
对象名.属性名
3.2.1 体验类外面获取对象属性
class Washer(): def wash(self): print('正在洗衣服...') haier1 = Washer() # 为对象haier1添加对象属性 # 宽度 haier1.width = 400 # 高度 haier1.height = 600 # 获取对象haier1的属性 print(f'洗衣机的宽度为{haier1.width}') print(f'洗衣机的高度为{haier1.height}')
3.3 类里面获取对象属性
语法:
self.属性
3.3.1 体验类里面获取对象属性
注意:
由于对象的属性是在创建对象后添加的,所以调用获取对象属性的方法一定要在添加属性之后。
由于self指的是调用方法的对象,所以在下面的代码中,self相当于haier1,当haier1调用获取对象属性的方法时,可以使用self在类里面获取对象属性。
class Washer(): def wash(self): print('正在洗衣服...') # 获取对象的属性 def print_info(self): print(f'洗衣机的宽度为{self.width}') print(f'洗衣机的高度为{self.height}') haier1 = Washer() # 为对象haier1添加对象属性 # 宽度 haier1.width = 400 # 高度 haier1.height = 600 # 调用对象获取对象属性的方法 haier1.print_info()
4 魔法方法
在Python中,形如__XX__()
的函数叫做魔法方法,指的是具有特殊功能的函数。
4.1 __init__()
4.1.1 体验__init__()
依旧以洗衣机为例,洗衣机的属性宽和高,在其制造出来是就已经具有,不是后期赋予的。所以,对象的有些属性,应当在其实例化时就应该具有。
__init__()
方法的作用:初始化对象,即用于设置对象与生俱来的属性。
注意:
__init__()
方法,在创建一个对象时默认被调用,不需要手动调用;
__init__(self)
中的self参数,不需要开发者传递,python解释器会自动把当前的对象引用传递过去。
# 定义init魔法方法初始化属性,并访问调用 # 定义类 class Washer(): def __init__(self): self.width = 400 self.height = 600 def print_info(self): print(f'洗衣机的宽度为{self.width}') print(f'洗衣机的高度为{self.height}') # 创建对象 haier = Washer() # 验证 haier.print_info()
4.1.2 带参数的__init__()
一个类可以创建不同的对象,使用带参数的__init__()
魔法方法可以在实例化对象时,为不同的对象指定不同的初始化属性值。
由于在创建对象的时候会自动调用
__init__()
方法,所以__init__()
方法的参数在创建对象时的类名(参数1, 参数2, ...)
传递。注意:
如果
__init__()
方法需要传参,而在创建对象的时候没有进行传参,会报错。
# 定义init魔法方法初始化属性,并访问调用 # 定义类 class Washer(): def __init__(self, width, height): self.width = width self.height = height def print_info(self): print(f'洗衣机的宽度为{self.width}') print(f'洗衣机的高度为{self.height}') # 创建对象 haier1 = Washer(400, 600) haier2 = Washer(500, 800) # 验证 haier1.print_info() print() haier2.print_info()
4.2 __str__()
当我们使用print()
输出对象时,默认打印对象的内存地址,如果类定义了__str__()
方法,就会打印从这个方法中return的数据。
一般
__str__()
方法中放的为解释说明的内容,如,解释说明类的作用,类的状态等。
# 定义类 class Washer(): def __init__(self, width, height): self.width = width self.height = height def __str__(self): return '类的解释说明' # 创建对象 haier1 = Washer(400, 600) # 验证 print(haier1)
4.3 __del__()
当删除对象时,python解释器会默认调用__del__()
方法。
当整个程序执行完成,系统会自动进行清除,所以不主动调用
del 对象名
,对象最终也会被删除,对象的__del__()
方法也会被自动调用。
# 定义类 class Washer(): def __init__(self, width, height): self.width = width self.height = height def __del__(self): print(f'{self}对象被删除...') # 创建对象 haier1 = Washer(400, 600) # 验证 print(haier1)