Chapter 25 面向对象

news2024/10/1 7:41:51

欢迎大家订阅【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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1979686.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

01 计算机系统基础-2

操作系统 进程管理 进程管理是操作系统的核心,但如果设计不当,就会出现死锁的问题。如果一个进程在等待一件不可能发生的事,则进程就死锁了。而如果一个或多个进程产生死锁,就会造成系统死锁。基于死锁产生机制及解决方案&#…

LeetCode Hard|【460. LFU 缓存】

力扣题目链接 LFU全称是最不经常使用算法(Least Frequently Used),LFU算法的基本思想和所有的缓存算法一样,一定时期内被访问次数最少的页,在将来被访问到的几率也是最小的。 相较于 LRU 算法,LFU 更加注重…

MATLAB霍夫曼表盘识别系统

MATLAB霍夫曼表盘识别系统 一、介绍 本设计为基于MATLAB的表盘指针识别,算法原理是基于hough变换。可检测压力表,石英手表,电表刻度,气压表等带指针刻度的表盘。通过hough检测直线和圆的关系,得出指针夹角&#xff0…

保形分位数回归(CQR)

目录 简介1 介绍提纲式总结 分位数回归从数据中估计分位数 3 共性预测4 保形分位数回归(CQR)两个定理 6 实验7 结论 简介 保形预测是一种构造在有限样本中获得有效覆盖的预测区间的技术,无需进行分布假设。尽管有这种吸引力,但现有的保形方法可能是不必…

(C题老外游中国)2024年华数杯大学生数学建模竞赛解题思路完整代码论文集合

我是Tina表姐,毕业于中国人民大学,对数学建模的热爱让我在这一领域深耕多年。我的建模思路已经帮助了百余位学习者和参赛者在数学建模的道路上取得了显著的进步和成就。现在,我将这份宝贵的经验和知识凝练成一份全面的解题思路与代码论文集合…

Open3D 三维重建-Delaunay Triangulation (德劳内三角剖分)

目录 一、概述 1.1原理 1.2实现步骤 1.3应用 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 3.1原始点云 3.2重建后点云 Open3D点云算法汇总及实战案例汇总的目录地址: Open3D点云算法与点云深度学习案例汇总(长期更新)-CSD…

MySQL--日志管理

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 一、日志简介 MySQL日志主要分为4类,使用这些日志文件,可以查看MySQL内部发生的事情。这4类日志分别是: 错误日志&#xff1…

程序编译及链接

你好!感谢支持孔乙己的新作,本文就程序的编译及链接与大家分析我的思路。 希望能大佬们多多纠正及支持 !!! 个人主页:爱摸鱼的孔乙己-CSDN博客 ​ ​ 1.翻译译环境与运行环境 当我们进行程序设计时&…

Android Graphics 显示系统 - 计算FPS的原理与探秘Present Fence

“ 最近忙着新房子装修的事情,这篇计划内的文章拖了好久一直没有足够的时间来写作,终于挤出些儿时间来继续研究学习了。” 整了四个晚上终于拼凑出一篇文章,虽说是讲FPS计算原理,但该文涉及的知识点还是蛮多的,特别是对…

webpack的loader机制

webpack的loader机制 loader本质上就是导出函数的JavaScript模块。导出的函数,可以用来实现内容的转换。 /* * param{string|Buffer} content 源文件的内容 * param{object} [map] SourceMap数据 * param{any} [meta] meta数据,可以是任何数据 * */ fu…

黑马头条vue2.0项目实战(五)——首页—频道编辑

目录 1. 使用页面弹出层 1.1 页面弹出层简单使用 1.2 创建频道编辑组件 1.3 页面布局 2. 展示我的频道 3. 展示推荐频道列表 3.1 获取所有频道 3.2 处理展示推荐频道 4. 添加频道 5. 编辑频道 5.1 处理编辑状态 5.2 切换频道 5.3 让激活频道高亮 5.4 删除频道 6.…

K8S Docker搭建RocketMQ Dledger高可用集群

本篇文章回顾在华润基于K8S和Docker云设施搭建初步高可用具备failover的RocketMQ集群。RocketMQ版本是5.0.0。 目前现状 采用Dledger模式部署集群,3台namesrv,3台broker,namesrv每台1g的Docker部署,broker每台2g的Docker部署。测…

Hyper-V创建虚拟机安装OpenEulerOS

文章目录 下载OpenEulerHyper-V创建虚拟机 下载OpenEuler 进入官网下载,我选择的是 openEuler 24.03 LTS ,选择第一个版本即可: Hyper-V创建虚拟机 点击新建->虚拟机: 点击下一步: 输入虚拟机名称&#xff0c…

AMD Product Specifications - AMD 产品规格汇总

AMD Product Specifications - AMD 产品规格汇总 1. Desktop, Laptop and Workstation Processor Specifications (台式处理器、笔记本电脑处理器和工作站处理器规格)2. Server Processor Specifications (服务器处理器规格)3. Embedded Processor Specifications (嵌入式处理器…

element-ui表格1.0.0.1,表格的属性

前言:基于vue2element-ui的理论转实践的使用 第一组:数据显示 利用v-bind:data在table绑定数据源,将数据利用prop的属性传入到table-column,渲染到表格中 正片开始 首先,常用的属性(作者常用&#xff09…

书生大模型_InternLM + LlamaIndex RAG 实践

1.任务要求 基于 LlamaIndex 构建自己的 RAG 知识库,寻找一个问题 A 在使用 LlamaIndex 之前InternLM2-Chat-1.8B模型不会回答,借助 LlamaIndex 后 InternLM2-Chat-1.8B 模型具备回答 A 的能力,截图保存。 来源: https://github.…

鸿蒙媒体开发【媒体会话-提供方】音频和视频

媒体会话-提供方 介绍 本示例主要展示了媒体会话(媒体提供方)的相关功能,使用ohos.multimedia.avsession等接口实现媒体提供方与媒体播控中心自定义信息的交互功能。 注意: 此示例仅展示媒体提供方的相关功能,如果需…

2024 年华数杯全国大学生数学建模竞赛C 题 老外游中国 完整成品文章分享

最近,“city 不 city”这一网络流行语在外国网红的推动下备受关注。随着我国过境免签政策的落实,越来越多外国游客来到中国,通过网络平台展示他们在华旅行的见闻,这不仅推动了中国旅游业的发展,更是在国际舞台上展现了…

大模型学习笔记 - LLM 解码与部署

LLM 解码与部署 LLM 解码与部署 1. 解码策略 1.1 背景 1.1 贪心搜所1.2 概率采样 1.2 贪心搜所改进 1.2.1 束搜索 (保留前n个高概率的句子,最终选取整体概率高的生成)1.2.2 长度惩罚 (估计生成更长句子)1.2.3 重复惩罚…

stm32入门-----硬件I2C读写MPU6050

目录 前言 一、stm32中I2C库函数介绍(stm32f10x_i2c.h) 1.初始化 2.使能操作 3.生成起始位和结束位标志 4.发送I2C从机地址 5.发送数据和接收数据 6.发送应答位 7.状态检测 二、硬件I2C读取MPU6050 1.电路连线图 2.主要工程文件 3.MPU6050.…