【Python】面向对象的程序设计

一、面向对象的介绍

1.对象

对象是一种抽象概念,表示客观世界存在的实物,现实世界中能够看到的、触碰到的都可以成为对象,如:人、大象、小猫等。

对象通常分为两个部分,即静态部分和动态部分。静态部分为“属性”,任何对象都具备自身属性;动态部分为“行为”,即对象执行的动作。

2.类

具有相同属性和行为的一类实体被称为类,类是封装对象的属性和行为的载体。

【在Python中,类是一类抽象概念,可以定义每个对象共有的属性和方法,对象是类的实例】

3.面向对象的程序设计的特点

对象含义主要指万物皆对象;类是具有相同属性和功能的对象的抽象集合;对象就是类的实例。面向对象的程序设计共有三个基本特征:封装、继承和多态。

①封装

在面向程序的设计中,封装是指把数据和实现操作的代码集中起来放在对象内部,对不可信的信息进行隐藏,使得代码模块化,保护数据不被其他函数的意外修改。并且从对象外面不能够直接访问对象的属性,只能通过和该属性对应的方法访问。

②继承

继承,一种对类进行分层划分的概念。继承的基本思想是在一个类的基础上制定出一个新的类,这个新的类不仅可以继承原来的类的属性和方法,还可以增加新的属性和方法,扩展已存在的代码块,实现代码重用。【一般情况下,一个子类只能有一个父类,子类覆盖在父类必须保证子类权限大于父类权限】

定义子类的语法如下:

class SubClass(BaseClass1,BaseClass2):语法块

③多态

将父类对象应用于子类的特征就是多态。即“一个接口,多种方法”,同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。多态可以实现接口重用。

示例:

从上述例子可以看出,当父类和子类存在相同的方法时,子类的方法会覆盖父类的方法,这样代码在运行时总会调用子类的方法,这就是多态。

二、类的定义和使用

1.类的定义

在Python中,类的定义是用class来实现的,其语法格式如下:

class ClassName:
'''类的帮助信息'''Statement

参数说明如下:

ClassName:用于指定类名,一般用大写字母开头,如果类名中包括两个单词,第二个单词的首字母也要大写,这种命名方法也成为了“驼峰命名法”。

'''类的帮助信息''':用于指定类的文档字符串,定义该字符串后,在创建类的对象时,输入类名和左侧的括号“(”后,将显示该信息。

Statement:类主要由类变量(或类成员)、方法和属性等定义语句组成。如果在定义时,没想好类的具体功能,也可以在类体中直接使用pass语句代替。

2.创建 _ _init_ _() 方法

在创建类之后,类通常会自动创建一个 _ _init _ _() 方法,该方法是一个特殊的方法,类似Java中的构造方法。每当创建一个新的类的实例时,Python都会自动执行它。_ _init_ _() 方法必须包含一个self参数,并且必须时第一个参数。self参数是一个指向实例本身的引用,用于访问类的方法和属性。在方法调用时会自动传递实际参数self。因此,当_ _init_ _() 方法只有一个参数时,在创建类的实例时,就不需要指定实际参数了。

class People:def __init__(self,name,sex,age):self.name = nameself.sex  = sexself.age  = age 

三、属性

1.属性存在的意义

(1)访问属性时可以制造出和访问字段完全相同的假象,属性由方法衍生而来,如果Python中没有属性,方法完全可以替代其功能。

(2)定义属性可以动态获取某个属性值,属性值由属性对应的方法实现,应用更加灵活。

(3)可以制订直接的属性规则,用于防止他人随意修改属性值。

2.操作属性的三种方法

(1)使用@property装饰器操作类属性

class Demo:@propertydef methodname(self):block

参数说明如下:

methodname:用于指定方法名,一般使用小写字母开头。该名称最后将作为创建的属性名。

self:必要参数,表示类的示例。

block:方法体,表示实现的具体功能。在方法体中,通常以return语句结束,于是返回计算结果。

定义时,在普通方法的基础上添加@property装饰器,属性仅有一个self参数,调用时无需括号,该方法的优点包括:

①@property装饰器可以实现其他语言所拥有的getter、setter和deleter的功能。

②通过@property装饰器可以对属性的取值和赋值加以控制,提高代码的稳定性。

(2)使用类或实例直接操作属性

这种方法的缺点是对类的属性没有操作控制规则,容易被人修改。

(3)使用Python内置函数操作属性

①getattr(obj,name[,default]):访问对象的属性,如果不存在返回对象属性的值,则会抛出AttributeError异常。

②hasattr(obj,name):检查是否存在某个属性,存在返回True,否则返回False。

③setattr(obj,name,value):设置一个属性。如果属性不存在,会创建一个新的属性,该函数无返回值。若存在则更新这个值。

④delattr(obj,name):删除属性,如果属性不存在则抛出AttributeError异常,该函数也无返回值。

四、继承

1.继承的基本语法

继承允许我们定义一个类时,让该类继承另一个类的所有方法和属性。

父类是被继承的类,也称为基类;子类是继承父类的类,也称为派生类。

继承概念的实现方式主要有两类:实现继承、接口继承。

(1)实现继承是指使用基类的属性和方法而无须额外编码的能力

(2)接口继承是指仅使用属性和方法的名称,但是子类必须提供实现的能力(子类重构父类方法)。

2.方法重写

当我们调用一个方法的对象时,会优先去当前对象中寻找是否具有该方法,如果有则直接调用,如果没有则去对象的父类中寻找,如果父类中有则直接调用父类中的方法,如果没有则还是去父类的父类中寻找,以此类推,直到找到object,如果始祖父类中也没有,就会报错。

示例:

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从教学到分享,2024精选录屏工具

如果你在公司里承担会议记录的职责,那录屏这项技能你一定要学会。像录屏大师这样的工具可以帮你在远程会议中进行录屏操作,方便你后期整理会议内容。 1.福昕录屏大师 链接直达:https://www.foxitsoftware.cn/REC/ 这款录屏工具提供了多种…

【Python】pandas:排序、重复值、缺省值处理、合并、分组

pandas是Python的扩展库(第三方库),为Python编程语言提供 高性能、易于使用的数据结构和数据分析工具。 pandas官方文档:User Guide — pandas 2.2.2 documentation (pydata.org) 帮助:可使用help(...)查看函数说明文…

MyBatis入门如何使用操作数据库及常见错误(yml配置)

一,什么是MyBatis 是一款优秀的持久层框架,用于简化jdbc的开发 持久层:指的就是持久化操作的层,通常也就是数据访问层(dao),也就是用来操作数据库。 也就是MyBatis是让你更加简单完成程序与数…

详细记录swfit微调interVL2-8B多模态大模型进行目标检测(附代码)

大模型相关目录 大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步,扬帆起航。 RAGOnMedicalKG:大模型结合知识图谱的RAG实现DSPy:变革式大模…

PRD: Peer Rank and Discussion Improve Large Language Model based Evaluations

文章目录 题目摘要相关工作方法实验与分析指标进一步分析结论 题目 PRD:同行排名和讨论改善基于大型语言模型的评估 论文地址:https://arxiv.org/abs/2307.02762 项目地址:https://openreview.net/forum?idYVD1QqWRaj 摘要 如今&#xff0c…

大模型深度神经网络(Deep Neural Network, DNN)

大模型深度神经网络(Deep Neural Network, DNN)是一种复杂的机器学习模型,其特点在于包含多个隐藏层,从而赋予模型强大的非线性表达能力和对复杂数据模式的学习能力。以下是对大模型DNN的详细介绍: 一、基本概念 深度…

第一阶段面试问题(前半部分)

1. 进程和线程的概念、区别以及什么时候用线程、什么时候用进程? (1)线程 线程是CPU任务调度的最小单元、是一个轻量级的进程 (2)进程 进程是操作系统资源分配的最小单元 进程是一个程序动态执行的过程,包…

MATLAB(6)水纹碰撞覆盖地形

前言 在MATLAB中模拟水纹(如水波)碰撞并覆盖地形的效果涉及到几个复杂的步骤,包括地形的生成、水波的模拟(通常使用波动方程)以及两者的交互。下面我将给出一个简化的示例,展示如何在MATLAB中创建一个基本的…

文献综述过程如何有助于综合各种来源的信息

VersaBot生成文献综述 文献综述过程在通过几个关键机制综合各种来源的信息方面发挥着至关重要的作用; 1. 批判性评估和比较: 你不能简单地单独总结每个来源;你积极地比较和对比他们的发现、方法和理论观点。这可以帮助您识别每个来源的共性…

安卓项目结构与日志工具

文章目录 安卓的项目结构app目录下的结构安卓的日志工具 安卓的项目结构 首先需要切换称Project模式。 .gradle和.idea :这两个目录下放置的都是Android Studio自动生成的一些文件,我们无须关心,也不用编辑。 app :项目中的代码、…

齿轮表面缺陷检测方案

齿轮是一种机械传动元件,通常由具有齿条的圆盘或圆柱体组成,用于传递动力和运动。齿轮通过齿与齿之间的啮合,将动力从一个轴传递到另一个轴,实现速度和扭矩的传递。齿轮通常用于机械设备、车辆传动系统和各种工业机械中。 齿轮通…

【网络世界】传输层协议

🌈前言🌈 欢迎收看本期【网络世界】,本期内容讲解TCP/IP协议栈中的传输层协议,即UDP协议和TCP协议。包含了他们的协议格式,特点等。介绍他们的应用场景,最后对比TCP与UDP协议。此外,还将介绍套接…

电商 API 接口的最佳实践与案例分析

在当今数字化的商业世界中,电商平台的发展日新月异,而 API 接口在其中扮演着至关重要的角色。通过合理地利用电商 API 接口,企业能够实现更高效的运营、更优质的用户体验以及更强大的业务拓展能力。本文将深入探讨电商 API 接口的最佳实践&am…

换根dp学习总结3

我也不想搞这么多,但是这东西真的太难了,因为我还是个蒟蒻。算了蒟蒻继续写这次的总结了 寻找全图最远路径问题——Computer ——题目来源于hdu2196 题意:题目就是说会输入多组数据,每组数据给你一个n,表示结点的总数…

SEO优化之a标签rel属性的使用

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storm…

每日一题 ~乘积最大子数组

. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/maximum-product-subarray/description/ 题目分析 题目要求找出给定整…

基于SpringBoot+Vue的热门网游推荐网站(带1w+文档)

基于SpringBootVue的热门网游推荐网站(带1w文档) 基于SpringBootVue的热门网游推荐网站(带1w文档) 本系统选用B/S结构开发,它是一个提供可以对热门网游推荐进行信息管理的系统,用户可以在该系统获取最新动态,可以结识更多的朋友,产…

基于级联深度学习算法在双参数MRI中检测前列腺病变的评估| 文献速递-AI辅助的放射影像疾病诊断

Title 题目 Evaluation of a Cascaded Deep Learning–based Algorithm for Prostate Lesion Detection at Biparametric MRI 基于级联深度学习算法在双参数MRI中检测前列腺病变的评估 Background 背景 Multiparametric MRI (mpMRI) improves prostate cancer (PCa) dete…

SDK 多版本管理控制利器 SDKMAN 介绍及使用

一、SDKMAN 假如你同时参与了一个使用JDK 8的项目和一个采用JDK 17特性的项目。每次在两个项目之间切换时,你都面临着版本冲突的问题。如果有那么一个工具类似于 Python 中的 anaconda 工具,可以帮助你管理不同版本的 SDK ,是不是非常有用&a…

八股文无用?也许是计算机大学生的重要人生指南!

大家所说的"八股文"其实指的是那些固定、标准化的面试问题和答案,通常涉及特定的知识点和技术概念。 博主本人也是一枚大学生,个人也记背过相关的八股文,比如计算机网络里的TCP和UDP的区别、TCP三次握手和四次挥手的具体过程等等&a…