Chapter 25 面向对象

欢迎大家订阅【Python从入门到精通】专栏,一起探索Python的无限可能!


前言

面向对象编程(OOP)是Python编程中的一个核心概念,它能帮助程序员更好地组织和管理代码。本篇文章详细讲解了面向对象编程的基本原理和应用。


本篇文章参考:黑马程序员

一、初识对象

【情景引入——生活中数据的组织】
学校开学要求学生填写自己的基础信息,老师给每位同学发了一张白纸,让学生自行填写。不同的学生自行填写的内容可能不尽相同,如下图所示:
在这里插入图片描述
显而易见,同学们填写的内容混乱。但是如果我们将白纸改为改为登记表,并打印出来让学生自行填写,他们就会按照我们设计的表格规范地填写内容,这样大家所填的信息就会整洁明了。
在这里插入图片描述

那程序又是如何组织数据的呢?
程序中有多种数据类型,可以采用不同的方式来组织数据,比如使用字典、字符串或列表来维护学生的信息。
在这里插入图片描述
然而,使用变量来记录学生信息可能会导致数据组织混乱和不统一。如果程序能够像生活中一样设计表格并打印出来供人填写,那么数据的组织将变得更加方便和清晰。面向对象的设计允许我们通过类和对象的方式来组织和管理数据,使得我们的程序结构更加清晰、易于理解和维护。

使用对象组织程序:
①在程序中设计表格,我们称之为设计类(class)
类是对现实世界中某种事物的抽象,它定义了事物的属性(数据)和行为(方法)。设计的登记表可以视为一个类,它定义了学生信息应包含的字段,如姓名、年龄、学号等。
在这里插入图片描述

②在程序中打印表格,我们称之为创建对象
打印一张表格类比于一个类的实例化,即创建一个对象。
在这里插入图片描述

③在程序中填写表格,我们称之为对象属性赋值
通过表格对象,学生可以填写自己的信息,每个学生填写的信息就是对该对象的特定实例。
在这里插入图片描述

所以在生活和程序中,我们可以通过设计、打印和填写表格的形式来组织数据。这一过程相当于使用类来封装属性,并基于类创建一个个对象来使用。
在这里插入图片描述

类的使用语法:
class 类名称 :
  类的属性
  类的行为

  • class关键字:表示定义一个类
  • 类的属性:定义在类中的变量(成员变量)
  • 类的行为:定义在类中的函数(成员方法)

注意:函数是写在类外的,定义在类内部的函数都称之为方法

创建类对象的语法:
对象 = 类名称()

在这里插入图片描述

# 1.设计一个类(类比生活中设计一张登记表)
class Student:
    name=None          # 记录学生姓名
    gender=None        # 记录学生性别
    nationality=None   # 记录学生国籍
    native_place=None  # 记录学生籍贯
    age=None           # 记录学生年龄

# 2.创建一个对象类比生活中打印一张登记表)
stu_1=Student()
# 3.对象属性进行赋值(类比生活中填写登记表)
stu_1.name="小明"
stu_1.gender="男"
stu_1.nationality="中国"
stu_1.native_place="广东省"
stu_1.age="15"
# 4.获取对象中记录的信息
print(stu_1.name)
print(stu_1.gender)
print(stu_1.nationality)
print(stu_1.native_place)
print(stu_1.age)

输出结果:
小明

中国
广东省
15

二、成员方法

类中不仅可以定义属性用来记录数据,也可以定义函数用来记录行为。

定义语法:
def 方法名(self,形参1,……,形参N):
  方法体

在类中定义成员方法和定义函数基本一致,但仍有细微区别,区别在于方法定义的参数列表中有一个self关键字。

  • 它用于表示类对象本身
  • 定义成员方法必须填写self关键字
  • 只有通过self,成员方法才能访问类的成员变量
  • 当我们使用类对象调用方法时self会自动被python传入
  • self出现在形参列表中,但是不占用参数位置,无需理会
# 定义一个带有成员方法的类
class Student:
    # 成员变量
    name=None  # 学生的姓名
    # self必须出现在传参列表中,但当我们调用的时候可以当它不存在
    # 成员方法
    def say_hi(self):
        print(f"大家好,我是{self.name},以后请多关照!")
    
     def say_hi2(self,msg):
        print(f"大家好,我是{self.name}{msg}")
        
# 创建类对象
stu1=Student()
stu1.name="小明"
stu1.say_hi()

stu2=Student()
stu2.name="小红"
stu2.say_hi2("很高兴认识大家!")

输出结果:
大家好,我是小明,以后请多关照!
大家好,我是小红,很高兴认识大家!

三、类和对象

现实世界的事物由属性和行为组成。
在这里插入图片描述
在这里插入图片描述
现实世界的事物有属性和行为,类也有属性和行为。使用程序中的类,可以完美的描述现实世界的事物。

基于类创建对象的语法:
对象 = 类名称()

面向对象编程的核心理念是使用对象进行编程。我们首先设计类,然后基于这些类创建对象,并利用这些对象来完成具体的任务。

思考:为什么必须创建对象才能使用类呢?
答:类可以看作是一种程序内部的“设计图纸”,只有基于这张图纸生成实际的实体(对象),才能使其正常工作。

在现实中生产事物:
在现实中生产一个闹钟需要我们先设计一张图纸,图纸中规划了闹钟的属性(比如厚度、尺寸、材质)以及行为(比如响铃),有了设计图纸后才会在生产线中生产出一个个实体。
在这里插入图片描述
在程序中通过类来描述:
在这里插入图片描述
基于类创建对象:
在这里插入图片描述

# 设计一个闹钟类
class Clock:
    id = None       # 闹钟编号
    price = None    # 价格


    def ring(self):
        # 导入 winsound 模块,实现音频的输出
        import winsound
        # 参数一frequency:音频频率 (单位Hz)
        # 参数二duration:音频持续时间 (单位毫秒)
        winsound.Beep(2000, 3000)

# 构建2个闹钟对象并让其工作
clock1 = Clock()
clock1.id = "003032"
clock1.price = 19.99
print(f"闹钟ID:{clock1.id},价格:{clock1.price}")
clock1.ring()

clock2 = Clock()
clock2.id = "003033"
clock2.price = 21.99
print(f"闹钟ID:{clock2.id},价格:{clock2.price}")
clock2.ring()

闹钟响铃并输出:
闹钟ID:003032,价格:19.99
闹钟ID:003033,价格:21.99

  • 28
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值