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

news2024/9/20 18:35:23

一、面向对象的介绍

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 = name
        self.sex  = sex
        self.age  = age 

三、属性

1.属性存在的意义

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

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

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

2.操作属性的三种方法

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

class Demo:
    @property
    def 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.coloradmin.cn/o/1966112.html

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

相关文章

UE4 SLUA IOS打包报错解决办法

IOS打包报错:Fatal error "lua.h" file not found : SLua Unreal 在IOS远程打包编译的时候 Exteral没有copy过去,导致lua.h文件报错找不到,看了网上也没有写解决办法 错误信息截图: github上也有很多遇到改…

【每日一题】【动态规划(DP) 】【分治 迭代】“葡萄城杯”牛客周赛 Round 53 D题 小红组比赛 C++

“葡萄城杯”牛客周赛 Round 53 D题 小红组比赛 题目背景 “葡萄城杯”牛客周赛 Round 53 题目描述 小红希望出一场题目,但是他的实力又不够,所以他想到可以从以前的比赛中各抽一题,来组成一场比赛。不过一场比赛的难度应该是有限制的&a…

【nginx】nginx日志出现on文件

问题描述 生产发现容器里多出了一个on文件,非常大。 去看nginx配置已经这样保持16个月了(已经去掉其他无关内容) 原因解释 这个问题是因为nginx配置了access_log on; 有两个知识点: 1.access_log只有off的特殊值&#xff0c…

三菱电火花设备采集

三菱电火花机器一般情况下应该很少能见到,但在模具行业应该说是一种常见的加工设备。 一、通过官方手册采集数据 1.资料使用 连接方式: 这里重点关注下端口是1112 这里主要讲NC的状态转换 我们重点关注的是状态相关命令,手册中还支持NC程序上传和下载,感兴趣的话可以研究…

排序算法:堆排序,golang实现

目录 前言 堆排序 代码示例 1. 算法包 2. 堆排序代码 3. 模拟程序 4. 运行程序 5. 从大到小排序 堆排序的思想 堆排序的实现逻辑 1. 构建最大堆 2. 排序 循环次数测试 假如 10 条数据进行排序 假如 20 条数据进行排序 假如 30 条数据进行排序 假设 5000 条数据…

数据库——战德臣

1. 数据存储体系 1.1 计算机系统的存储体系 1.将不同性价比的存储组织在一起,满足高速的、大容量、低价格需求 2.CPU与内存直接交换信息,按存储单元(存储字)进行访问 3.外存按存储块进行访问,其信息先装入内存&…

NSSCTF-GDOUCTF 2023新生赛

[GDOUCTF 2023]hate eat snake 考察:js代码审计 打开题目,发现需要坚持60秒,那么简单的一个思路就是修改得分的变量>60即可 办法1:修改变量 右键查看源代码,之后发现有一个snake.js的文件,ctrlf搜索i…

健康小贴士丨中考考生怎么吃得好?

文章目录 引言三餐最佳的进食时间引言 中考正值初夏,气温急剧升高,食物易滋生细菌,发生食物中毒的风险也随之增加,医生建议 选择新鲜的食材,煮熟煮透,现吃现做,尽量不食用剩饭剩菜;不在路边露天摊点、不到无证和食品安全状况差的餐馆用餐;尽量减少在外就餐和点外卖的…

客服中心:高效知识库管理,6步提高70%用户体验

在当今快节奏的商业环境中,客服中心作为企业与客户沟通的重要桥梁,其运作的顺畅与否直接影响着客户的满意度和忠诚度。而知识库作为客服中心的核心资源之一,其管理水平的高低更是直接影响着客服的工作效率和问题解决能力。本文将深入探讨一系…

Django之JsonResponse对象

【图书介绍】《Django 5企业级Web应用开发实战(视频教学版)》_django 5企业级web应用开发实战(视频教学版)-CSDN博客 《Django 5企业级Web应用开发实战(视频教学版)》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com) 在Django框…

“LangChain实战:探索回调函数的应用

前言 毫无疑问,2024将是人工智能丰收年,开始寒假的我,准备先把LangChain捋一遍。 这篇文章来学习下callback机制, 之前聊过AutoGen的callback机制,我们来对比下。 回调和异步 作为js开发者,对于回调函数…

springboot智能健康管理平台-计算机毕业设计源码57256

摘要 在当今社会,人们越来越重视健康饮食和健康管理。借助SpringBoot框架和MySQL数据库的支持,开发智能健康管理平台成为可能。该平台结合了小程序技术的便利性和SpringBoot框架的快速开发能力,为用户提供了便捷的健康管理解决方案。 通过智能…

无线磁吸充电宝哪个牌子值得入手?什么牌子磁吸充电宝性价比高?

在当下科技日新月异的时期,无线磁吸充电宝成为了众多电子设备用户的得力助手。然而,面对市场上众多品牌和型号的无线磁吸充电宝,消费者常常陷入选择的困境:到底哪个牌子值得入手?什么牌子的磁吸充电宝性价比高&#xf…

【JavaScript】详解默认导出和命名导出的区别

文章目录 一、默认导出二、命名导出三、默认导出和命名导出的区别四、实际应用案例五、总结 在JavaScript模块化开发中,导入和导出模块是核心操作。ES6引入的模块化语法提供了两种主要的导出方式:默认导出(default export)和命名导…

【2024蓝桥杯/C++/B组/宝石组合】

代码来源2024第十五届蓝桥杯 C/CB组真题题解_蓝桥杯2024b组c语言答案-CSDN博客 证明s的简化式子

【Linux】命令行通配符

Linux在文件管理方面提供了丰富的功能,例如通配符,它是一种用于匹配文件名的特殊字符。通配符在Linux中可以帮助我们更加方便和快捷地查找和操作文件。 1.命令行通配符 通配符是一种特殊语句,主要有星号(*)、问号(?)等表示,用来…

记一个搞笑的自写类加载TemplatesImpl

今天没事想自己写个CC3类加载 结果为了顺利触发到TemplatesImpl#getTransletInstance的newInstance给我整急眼了,使劲改字段强行通过循环 结果搞了个下面的代码出来 import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl; import com.sun.org.apa…

手机买对不买贵!性价比之王再升级,致敬奋斗者

众所周知,比起旗舰机,中端机一年要发几次新款机型,因此,一两千元的价位段就尤其的卷。那此时作为消费者的我们就是赚了,花更少的钱就能买到更好的产品。华为畅享70S这款手机是今年最新的一款针对性价比用户推出的千元机…

大厂面试必备的软件测试八股文【附答案】

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 前言 最近有很多粉丝问我,有什么方法能够快速提升自己,通过阿里、腾讯、字节跳动、京东等互联网大厂的面试,我觉得短时间提升…