python--实验 9 类和对象

知识点 

  1. 面向对象编程思想

    • 面向对象编程是一种编程范式,它使用“对象”来设计软件,这些对象可以包含数据和代码,即属性和方法。
      • 面向对象的程序设计的核心是对象,世间存在的万物皆为对象(上帝式思维) 面向对象,就是在编程的时候尽可能的去模拟现实世界!所谓的模拟现实世界,就是使计算机的编程语言在解决相关业务逻辑的时候,与真实的业务逻辑的发生保持一致,需要使任何一个动作的发生都存在一个支配给该动作的一个实体(主体、对象),因为在现实世界中,任何一个功能的实现都可以看做是一个一个的实体在发挥其各自的“功能”(能力)并在内部进行协调有序的调用过程!
  2. 面向过程 vs 面向对象

    • 面向过程: 程序设计以过程为中心,将问题分解为一系列步骤,用函数实现。
      • 优点: 降低编程复杂度,易于理解和实现。
      • 缺点: 代码修改困难,可扩展性差。
    • 面向对象: 以对象为中心,模拟现实世界中的事物和行为。
      • 优点: 增强程序的扩展性和可维护性。
      • 缺点: 控制性差,难以预测程序行为。无法像面向过程的程序设计流水线式的可以很精准的预测问题的处理流程与结果,面向对象的程序一旦开始就由对象之间的交互解决问题,即便是上帝也无法预测最终结果。
      • 过程:
        • 第一步:分析哪些动作是由哪些实体发出的。学生提出报名、学生提供相关资料、学生缴费、机构收费、教师分配教室、班级增加学生信息;一共有四个实体:学生、机构、教师、班级(实体即对象)。
        • 第二步:定义这些实体,为其增加相应的属性和功能。
        • 第三步:让实体去执行相应的功能|动作
  3. 面向对象的三大特征

    • 封装: 隐藏对象的内部状态和实现细节。
    • 继承: 允许新创建的类(子类)继承现有类(父类)的属性和方法。
    • 多态: 允许不同类的对象对同一消息做出响应,但具体行为会有所不同。
  4. 类与对象

    • 对象: 现实世界中的事物,具有属性和方法。对象的特征用数据来表示,称为属性(property)。对象的行为用程序代码来实现,称为对象的方法(method)
    • : 一组具有相同属性和行为的对象的集合,为对象提供统一的抽象描述。它为属于该类的全部对象提供了统一的抽象描述。对象是类的实例(instance)。
  5. 类的定义,创建和对象的实例化

    • 类(class)是具有相同属性和行为的一组对象的集合,由3部分组成的: 类名:类名,大驼峰,单词之间无分隔符 属性:一组数据,比如角色,性别等。 方法:允许进行操作的方法,比如走路。
    • 使用关键字class定义类,使用__init__方法进行对象的初始化。
    • __init__方法构造方法     无需直接调用,生成实例对象的时候自动调用,用来初始化新创建对象的属性。若没有定义构造方法(__init__()方法),在类的实例化时,系统会调用默认的无参构造方法。 self参数     代表当前类的实例。Python规定:实例方法的第一个参数,就必须是实例对象本身,并且约定俗成,把其名字写为self。self不是python的关键字,也可以用其他名称命名,但是为了规范和便于读者理解,推荐使用self。在调用时不必传入相应的参数。
    • 通过类名和参数列表创建对象实例
      • 根据类创建对象的语法格式:对象名 = 类名(参数列表)
      • 给对象添加属性:对象名.新的属性名 = 值
      • 访问对象的属性:对象名.属性名
      • 访问对象的方法:对象名.方法名([实参])
      • 注意:调用方法时,实参要与除self以外的其他形参匹配
    • 类和函数: 相似:以“冒号:”开始,统一缩进 区别:关键字(def - class)
  6. 属性和方法

    • 属性: 对象的状态,存储为数据。
    • 方法: 对象的行为,实现为函数。
    • 类属性:在类中且在方法之外定义。类属性就是类对象所拥有的属性,用来记录与这个类相关的特征,它被所有类对象的实例对象所公有,在内存中只存在一个副本。类属性可以通过类名以及实例名来访问。
      • 类名.__name__# 类的名字(字符串)
      • 类名.__doc__# 类的文档字符串
      • 类名.__base__# 类的第一个父类(在讲继承时会讲)
      • 类名.__bases__# 类所有父类构成的元组(在讲继承时会讲)
      • 类名.__dict__# 类的字典属性
      • 类名.__module__# 类定义所在的模块
      • 类名.__class__# 实例对应的类(仅新式类中)
    • 不用new,用__init_对象
      类变量(方法外定义)实例变量(__init__方法内定义)
      实例方法(默认)第一个参数self,自动绑定到实例方法
      类方法第一个参数cls
      静态方法

  7. 属性和方法的访问控制

    • 类属性: 属于类本身,所有实例共享。
    • 实例属性: 属于对象实例,每个实例独立拥有。实例属性是不需要在类中显式定义,而在__init__构造函数中定义的。在其他方法中也可以随意添加新的实例属性,但并不提倡这么做,所有的实例属性最好在__init__中给出。实例属性属于实例(对象),只能通过对象名访问。
      • 说明:在init()方法中初始化对象的全部属性是一个好习惯,可以帮助用户更好地管理类中的属性和对属性值的更改。
      • 说明: python 创建和类属性同名的实例属性,通过实例访问就是实例属性,通过类访问的属性就是类的属性
    • 实例方法:通常情况下,在类中定义的方法默认都是实例方法。只有实例化对象之后才可以使用的方法。
      • 实例方法最大的特点就是,它最少也要包含一个 self 参数,用于绑定调用此方法的实例对象(Python 会自动完成绑定)。
      • 实例方法通常会用实例对象直接调用。当然,Python 也支持使用类名调用实例方法,但此方式需要手动给 self 参数传值
      • 两个特殊的实例方法: 构造方法:__init__(self) 析构方法__del__(self)。此方法一般无需定义。当对象在内存中被释放时,自动触发执行.
    • 类方法: 类方法是类对象所拥有的方法。​​​​​​​使用@classmethod装饰器,与类相关的方法。可以通过类对象和类的实例对象访问。​​​​​​​
      • ​​​​​​​
      • 使用方法: 对象名.类方法名。或者是 类名.类方法名 作用:用来修改类属性,或调用其他的类方法。 应用场景:当一个方法中只涉及到静态属性的时候可以使用类方法.
    • 静态方法: 使用@staticmethod装饰器,与类和实例都无关的方法。静态方法不需要多定义参数。可以通过类对象和实例对象访问。
      • ​​​​​​​
      • 使用方式:  类名.类方法名(或者实例对象名.类方法名)。 功能:将被装饰的函数从类中分离出来,该函数不能访问类的属性,简单说可以将该函数理解为一个独立的函数,不允许使用self。 应用场景:一般用于和类对象以及实例对象无关的代码。
    • static method(静态方法):既不使用对象的属性,也不使用类的属性               class method(类方法):不使用对象的属性,只使用类的属性
    • python私有方法和私有属性:
      • Python默认的成员函数和成员变量都是公开的。  在变量名或函数名前加上 "__"两个下划线,那么这个函数或变量就会为私有的了。 声明该方法为私有方法,不能在类的外部调用。但可以在类内部访问私有方法
      • 为了更好的保存属性安全,即不能随意修改,一般的处理方式为: 将属性定义为私有属性(以两个下划线开头) 添加一个可以调用的方法,供调用 说明: python 私有属性只能在类内部访问,类外面访问会出错。 python 保护属性更多的是一种语法上的标识,用来提醒直接修改改对象时候要小心。

实验 

  • 实验目的
  1. 掌握python的面向对象的程序设计概念
  2. 理解python的类与对象的定义
  3. 掌握python的类与对象的操作方法
  4. 理解python的属性、方法和函数的区别
  • 实验内容:

说明:基础题为必做题,提高题为选做题

  1. (基础题)

定义矩形类Rectangle,有三个方法:

(1)__init__方法:初始化长和宽

(2)getArea方法:返回矩形的面积

(3)getPerimeter方法:返回矩形的周长

输出长为10,宽为5的矩形的周长和面积

代码:

class Rectangle:def __init__(self, length, width):self.length = lengthself.width = widthdef getArea(self):return self.length * self.widthdef getPerimeter(self):return 2 * (self.length + self.width)# 创建对象并调用方法
rectangle = Rectangle(10, 5)
print("周长:", rectangle.getPerimeter())
print("面积:", rectangle.getArea())

2、(基础题)

定义一个学生类Student

1.有下面的属性:姓名 年龄 成绩(语文,数学,英语)[每课成绩的类型为整数]

2.包含如下方法

1) 获取学生的姓名:get_name() 返回类型:str

2 )获取学生的年龄:get_age() 返回类型:int

3 )返回3门科目中最高的分数:get_course() 返回类型:int

调用相应方法,分别输出某学生姓名,年龄和最高成绩。

代码:

class Student:def __init__(self, name, age, scores):self.name = nameself.age = ageself.scores = scoresdef get_name(self):return self.namedef get_age(self):return self.agedef get_course(self):return max(self.scores)# 创建对象并调用方法
student = Student("张三", 20, [88, 92, 85])
print("姓名:", student.get_name())
print("年龄:", student.get_age())
print("最高成绩:", student.get_course())

3.(基础题)商品打折扣(所有商品8折出售)

提问:分析此方案的弊端,并提出改进方案(用类属性和类方法结合实现所有商品统一打折)

  1. 此方案的弊端
  2. 改进代码:(用类属性和类方法结合实现所有商品统一打折)

代码:

class Product:discount = 0.8  # 类属性,统一折扣def __init__(self, price):self.price = price@classmethoddef apply_discount(cls, price):return price * cls.discount# 使用
original_price = 100
discounted_price = Product.apply_discount(original_price)
print("打折后价格:", discounted_price)

4.(选做题)

编写有一个学生类,提供name、age、gender、phone、address、email属性,为该类提供带所有成员的构造器,并提供方法,用于描述吃、喝、玩、睡等行为。

代码:

 

class Student:def __init__(self, name, age, gender, phone, address, email):self.name = nameself.age = ageself.gender = genderself.phone = phoneself.address = addressself.email = emaildef eat(self):print(f"{self.name} is eating.")def drink(self):print(f"{self.name} is drinking.")def play(self):print(f"{self.name} is playing.")def sleep(self):print(f"{self.name} is sleeping.")# 创建学生对象
student1 = Student("Alice", 20, "Female", "123-456-7890", "123 Apple St.", "alice@example.com")# 调用行为方法
student1.eat()
student1.drink()
student1.play()
student1.sleep()

Python中的类由什么组成?对象的状态、行为用什么来表示?

Python中的类主要由以下几部分组成:

  1. 属性: 用来表示对象的状态,可以是数据字段,也可以是方法。
  2. 方法: 定义了对象的行为,即对象可以执行的操作。
对象的状态和行为表示
  • 状态: 通常由对象的属性来表示,这些属性存储了数据,描述了对象的特征。
  • 行为: 通过对象的方法来表示,这些方法是可以被调用的函数,定义了对象能执行的操作。

如何定义Python中的类?类属性与对象属性有什么不同?

定义Python中的类

在Python中,使用class关键字来定义一个类。类定义通常包括初始化方法__init__和其他方法。例如:

class MyClass:def __init__(self, attribute1, attribute2):self.attribute1 = attribute1  # 实例属性self.attribute2 = attribute2def method1(self):# 方法体pass
类属性与对象属性的区别
  • 类属性: 属于类本身,由类的所有实例共享。它们在类定义的外部定义,但在方法内部可以通过cls参数访问。
  • 对象属性: 属于类的每个实例,每个实例都有自己的独立副本。它们通常在__init__方法中定义。

怎样创建类的对象?怎样调用对象方法?

创建类的对象

创建类的对象,即实例化类,是通过使用类名后跟括号和必要的参数来完成的。例如:

my_object = MyClass(value1, value2)

调用对象方法

要调用对象的方法,需要使用点符号(.)连接对象的名称和方法的名称,并传递必要的参数。例如:

my_object.method1()

这里是一个具体的例子,展示如何定义类、创建对象以及调用方法:

# 定义一个类
class Person:species = 'Homo sapiens'  # 类属性def __init__(self, name, age):self.name = name  # 对象属性self.age = agedef speak(self, message):print(f"{self.name} says: {message}")# 创建对象
person1 = Person("Alice", 30)# 调用对象方法
person1.speak("Hello, world!")# 访问类属性
print(Person.species)

在这个例子中,Person类有两个属性:species是一个类属性,nameage是对象属性。speak是一个实例方法,它通过person1对象被调用。

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

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

相关文章

TomCat服务器安装和配置教程

1.TomCat下载路径 TomCat官方网站:http://tomcat.apache.org 前往该网站下载安装tomcat,tar.gz文件是Linux操作系统的安装版本,zip文件是 windows操纵系统的压缩版本 打开后是如下网站,请下载匹配的操作系统的文件并且选择合适的…

2023 年 GitHub 上最受欢迎的编程语言

JavaScript 仍然是使用最多的编程语言,在 Web 开发中占据重要地位。 被广泛用于 Web 应用程序开发,框架如 React 和 Angular 促进了单页应用程序的开发。 Node.js 的出现使其在后端编程中同样重要。 Python 由于其简单性和广泛的库,Pyth…

自注意力简介

在注意力机制中,每个查询都会关注所有的键值对并生成一个注意力输出。如果查询q,键k和值v都来自于同一组输入,那么这个注意力就被称为是自注意力(self-attention)。自注意力这部分理论,我觉得台大李宏毅老师…

新兴商业模式如何破局?市场策划专家的实战指南

在这个融合了传统市场、互联网和信息技术的大潮中,想要在市场营销策划上玩得转,咱们得有超凡的全局思维和跨界的协作精神。 下面,我就来和大家聊聊如何在这样一个复杂环境下搞定市场营销策划,让你在竞争激烈的市场中脱颖而出。 …

Nodejs 第八十二章(Nacos动态配置)

什么是动态配置? 在Nacos中,动态配置是指可以在运行时动态修改应用程序的配置信息,而不需要重新启动或重新部署应用程序。通过Nacos的动态配置功能,开发人员可以将应用程序的配置信息存储在Nacos服务器中,并在需要时进…

PTK是如何加密WLAN单播数据帧的?

1. References WLAN 4-Way Handshake如何生成PTK?-CSDN博客 2. 概述 在Wi-Fi网络中,单播、组播和广播帧的加密算法是由AP决定的。其中单播帧的加密使用PTK密钥,其PTK的密钥结构如下图所示: PTK的组成如上图所示,由K…

做一个专业的声音分析系统,需要对声音那些评判标准进行计算

为了构建一个专业的声音分析系统,需要对以下评判标准进行计算。每个标准需要相应的算法和技术指标来实现。下面是一些关键的评判标准和如何计算这些标准的具体方法: 1. 音质 清晰度 信噪比(SNR):计算音频信号中的信…

win11下部署Jenkins,build c#项目

一个c#的项目,由于项目经理总要新版本测试,以前每次都是手动出包,现在改成jenkins自动生成,节省时间。 一、下载Jenkins, 可以通过清华镜像下载Index of /jenkins/windows-stable/ | 清华大学开源软件镜像站 | Tsingh…

前端使用pinia中存入的值

导入pinia,创建pinia实例 使用pinia中的值

mysql8多值索引

MySQL8新出了一个多值索引,我还没体验过呢,今天试一试。 建表 我先建个表试一试多值索引的效果。我粗略地看了下多值索引的介绍,发现是只适用于数组类型的。所以我建一个含有数组字段的表试一试。语法还是挺麻烦的: create tabl…

2.电容(常见元器件及电路基础知识)

一.电容种类 1.固态电容 这种一般价格贵一些,ESR,ESL比较低,之前项目400W电源用的就是这个,温升能够很好的控制 2.铝电解电容 这种一般很便宜,ESR,ESL相对大一些,一般发热量比较大,烫手。 这种一般比上一个贵一点&am…

开源公司网站源码系统,降低成本,提升效率 附带完整的安装代码包以及搭建教程

系统概述 开源公司网站源码系统是一个基于开源技术的网站建设解决方案。它提供了完整的网站框架和功能模块,允许企业快速搭建起一个功能齐全、设计美观的企业网站。该系统不仅降低了网站开发的成本,还大大提高了建设效率,使企业能够更快地将…

泛微开发修炼之旅--37通过js实现监听下拉框,并触发后端接口,改变其他控件内容的实现方法与源码(含pc端和移动端实现)

文章链接:37通过js实现监听下拉框,并触发后端接口,改变其他控件内容的实现方法与源码(含pc端和移动端实现)

游戏AI的创造思路-技术基础-决策树(2)

上一篇写了决策树的基础概念和一些简单例子,本篇将着重在实际案例上进行说明 目录 8. 决策树应用的实际例子 8.1. 方法和过程 8.1.1. 定义行为 8.1.2. 确定属性 8.1.3. 构建决策树 8.1.4. 实施行为 8.1.5. 实时更新 8.2. Python代码 8. 决策树应用的实际例子…

滑动窗口,最长子序列最好的选择 -> O(N)

最近在学校上短学期课程,做程序设计题,一下子回忆起了大一学数据结构与算法的日子! 这十天我会记录一些做题的心得,今天带来的是对于最长子序列长度题型的解题框架:滑动窗口 本质就是双指针算法: 通过le…

模拟生成高斯随机数序列

模拟和生成高斯随机数序列(服从标准正态分布的随机变量) Box-Muller 法 & Marsaglia 极坐标法 Box-Muller:使两个独立的均匀分布生成一个高斯分布。 Box-Muller方法的基本思想是利用两个独立的均匀分布随机变量的关系来生成高斯分布的…

Ubuntu与Windows通过WIFI与以太网口共享网络,Ubuntu与Windows相互ping通,但ping百度失败

Linux开发板(正点原子阿尔法_IMX6U)与Ubuntu的文件传输SCP 报错 SSH: no matching host key type found. Their offer: ssh-rsa-CSDN博客 前面的文章提到了如何将Ubuntu与Windows通过WIFI共享网络给以太网,从而实现Linux开发板、Ubuntu、Win…

香港优才计划续签难吗?一次性说清楚优才续签要求,不在香港居住也能续签成功!

香港优才计划续签难吗?这个问题对考虑申请优才的人来说,还是挺重要的。我们申请优才,最关注的2个问题,一个是获批,还有一个就是续签了。 毕竟我们费那么大功夫申请优才,可不只是为了一个为期3年的香港临时…

如何分析软件测试中发现的Bug!

假如你是一名软件测试工程师,每天面对的就是那些“刁钻”的Bug,它们像是隐藏在黑暗中的敌人,时不时跳出来给你一个“惊喜”。那么,如何才能有效地分析和处理这些Bug,让你的测试工作变得高效且有趣呢?今天我…

MongoDB - 集合和文档的增删改查操作

文章目录 1. MongoDB 运行命令2. MongoDB CRUD操作1. 新增文档1. 新增单个文档 insertOne2. 批量新增文档 insertMany 2. 查询文档1. 查询所有文档2. 指定相等条件3. 使用查询操作符指定条件4. 指定逻辑操作符 (AND / OR) 3. 更新文档1. 更新操作符语法2. 更新单个文档 updateO…