[Python]面向对象基础

2022-10-16 13:18:16



视频链接

根据视频进行整理
Python面向对象基础

学习目标

  1. 理解面向对象
  2. 类和对象
  3. 添加和获取对象属性
  4. 魔法方法

1 理解面向对象

面向对象是一种抽象化的编程思想。

在面向对象的编程思想中,一个程序可以认为是一个世界,在这个世界中有各种各样的事物(每个事物即为一个对象),事物即程序所涉及的现实生活存在的物品或者生命等。

在面向对象的思想中,实现功能都像日常生活中使用物品完成某项工作一样,我们不用像结构化编程思想(可以认为一个动作一个指令)那样,可以不用关系物品的内部是如何构成的,使用物品时直接调用对应的功能即可。

以洗衣服为例:
结构化编程(手洗):
找盆 => 放水 => 加洗衣粉 => 浸泡 => 搓洗 => 拧干水 => 倒水 => 漂洗 => 拧干 =>晾晒
面向对象编程(机洗):
打开洗衣机 => 放衣服 => 加洗衣粉 => 按下开始按钮(调用洗衣机洗衣服的功能) => 晾晒

2 类和对象

上述洗衣服的案例可以得到,我们使用洗衣机洗衣服,其实就是在使用一个我们世界存在的事物完成对应的工作。洗衣机是一个事物,即现实存在的事物就是对象。

洗衣机的制造是根据洗衣机的制作图纸制造的,同理,对象的制造也需要一个对应的图纸,我们将制造对象的图纸称为类。

由此,我们可以认为,类就是制造对象的图纸,一个对象就是一个事物。

类和对象的关系:用类创建对象

创建对象,又称为实例化。

2.1 理解类和对象

2.1.1 类

在洗衣机的制作图纸中,会标明洗衣机的尺寸大小,也会写明洗衣机的功能。

在程序中,洗衣机的尺寸大小等指标(特征),为变量;洗衣机的功能(行为)对应程序中的函数。

在面向对象中,类是对一系列具有相同特征和行为的事物统称,是一个抽象的概念,不是真实存在的事物。

在面向对象中,特征即属性;行为即方法

类的作用:用来创建对象

2.1.2 对象

对象是类创建出来的真实存在的事物,例如:上述例子中的洗衣机。

注意:先有类,再有对象。
先有洗衣机的制作图纸才能制造出洗衣机。

2.2 面向对象实现方法

2.2.1 定义类

语法:

class 类名():
	代码......

注意:类名要满足标识符命名规则,同时遵守大驼峰命名习惯

类名后的括号中写的是继承的类。

2.2.2 创建对象

对象,也可以称为实例。

用类创建的对象会具有类中的所有属性与方法。

语法:

对象名= 类名()

注意:先有类,才有对象。

2.2.3 体验类和对象

函数写在类中,为实例方法,实例就是对象,所以实例方法又叫对象方法。
实例方法的调用:对象名.方法名()

"""
创建一个洗衣机
洗衣机的功能:洗衣服
"""# 定义洗衣机类classWasher():defwash(self):"""
    洗衣机洗衣服的功能
    :return: 无返回值
    """print('正在洗衣服...')# 创建洗衣机对象 -- 海尔牌洗衣机
haier= Washer()# 验证# 打印创建的haier对象print(haier)# 使用洗衣机的洗衣服功能
haier.wash()

在这里插入图片描述

2.2.4 self

self指的是调用该函数的对象。

"""
创建一个洗衣机
功能:洗衣服
"""# 定义洗衣机类classWasher():defwash(self):"""
    洗衣机洗衣服的功能
    :return: 无返回值
    """print('正在洗衣服...')print(self)# 创建洗衣机对象 -- 海尔牌洗衣机
haier= Washer()# 验证# 打印创建的haier对象print(haier)# 使用洗衣机的洗衣服功能
haier.wash()

在输出结果中,打印的两个内存地址(对象的内存地址和self的内存地址)一致,所以,self指的是调用该函数的对象。
在这里插入图片描述

2.2.5 一个类创建多个对象

在现实生活中,根据一个洗衣机图纸可以制造无数个一样的洗衣机。在面向对象的编程中,根据一个类也可以创建出无数个一个的对象,创建的对象的个数根据实际需要而定。

classWasher():defwash(self):print('正在洗衣服...')print(self)

haier1= Washer()
haier1.wash()print(haier1)

haier2= Washer()
haier2.wash()print(haier1)

由结果可得:
一个类可以创建多个不同的对象;
self指的是调用该函数的对象。
在这里插入图片描述

3 添加和获取对象属性

对象的属性,即对象的特征,例如,洗衣机的宽、高、重量。

对象的属性既可以在类外面添加和获取,也能在类里面添加和获取。

给对象添加属性,是由于,不同的对象,会存在不同的特征。
如,海尔牌的洗衣机,存在不同尺寸的同一型号的洗衣机。

3.1 类外面添加对象属性

语法:

对象名.属性名=

3.1.1 体验类外面添加对象属性

classWasher():defwash(self):print('正在洗衣服...')

haier1= Washer()# 为对象haier1添加对象属性# 宽度
haier1.width=400# 高度
haier1.height=600

3.2 类外面获取对象属性

语法:

对象名.属性名

3.2.1 体验类外面获取对象属性

classWasher():defwash(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在类里面获取对象属性。

classWasher():defwash(self):print('正在洗衣服...')# 获取对象的属性defprint_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魔法方法初始化属性,并访问调用# 定义类classWasher():def__init__(self):
        self.width=400
        self.height=600defprint_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魔法方法初始化属性,并访问调用# 定义类classWasher():def__init__(self, width, height):
        self.width= width
        self.height= heightdefprint_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__()方法中放的为解释说明的内容,如,解释说明类的作用,类的状态等。

# 定义类classWasher():def__init__(self, width, height):
        self.width= width
        self.height= heightdef__str__(self):return'类的解释说明'# 创建对象
haier1= Washer(400,600)# 验证print(haier1)

在这里插入图片描述

4.3__del__()

当删除对象时,python解释器会默认调用__del__()方法。

当整个程序执行完成,系统会自动进行清除,所以不主动调用del 对象名,对象最终也会被删除,对象的__del__()方法也会被自动调用。

# 定义类classWasher():def__init__(self, width, height):
        self.width= width
        self.height= heightdef__del__(self):print(f'{self}对象被删除...')# 创建对象
haier1= Washer(400,600)# 验证print(haier1)

在这里插入图片描述

  • 作者:计科_xiao_cai_ji
  • 原文链接:https://blog.csdn.net/m0_53022813/article/details/126713632
    更新时间:2022-10-16 13:18:16