python--实验 9 类和对象

news2024/9/9 4:36:08

知识点 

  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 = length
        self.width = width
    
    def getArea(self):
        return self.length * self.width
    
    def 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 = name
        self.age = age
        self.scores = scores

    def get_name(self):
        return self.name

    def get_age(self):
        return self.age

    def 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

    @classmethod
    def 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 = name
        self.age = age
        self.gender = gender
        self.phone = phone
        self.address = address
        self.email = email

    def 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 = attribute2

    def 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 = age

    def 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.coloradmin.cn/o/1918266.html

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

相关文章

科普文:一天学会shell编程

1.shell概叙 本文将从shell执行、语法、实战三个方面来讲解shell编程,其实shell编程就是个批处理,将你平时在服务器上单独执行的命令,按照一定要求组织起来,写在一起,然后统一执行,就完事了。 对于运维人员…

零基础小白人手必备“新华字典”,涵盖入门到进阶,超全语法!精炼总结64页,背完你的Python就牛了!

《Python背记手册》是一本旨在帮助初学者快速入门Python的实用手册,其特点鲜明,内容全面且易于理解。 书籍PDF已打包好,戳这里领取 一、书籍基本信息 作者:书籍的作者通常具有深厚的Python开发背景,有的作者是在美国攻…

MAVSDK示例takeoff_and_land编译与使用

1.克隆MAVSDK源码 ,示例位于源码的examples中 2.安装MAVSDK,下载https://github.com/mavlink/MAVSDK/releases/download/v2.12.2/mavsdk-windows-x64-release.zip 下载后解压:

三星首款智能戒指 Galaxy Ring 将于7月24日上市,售价399美元

三星电子即将推出其首款智能戒指——Galaxy Ring,这款创新的可穿戴设备将于7月24日上市,定价为399美元。Galaxy Ring的亮相标志着三星在智能穿戴设备领域的新突破,它不仅证明了三星在技术革新上的持续能力,也显示了其在健康和健身…

编号根据规则自增生成,及spring事务和锁

1、 背景 需要根据一些规则来生成自增编号,比如:95JS0001,950002 95JS是固定的,而后缀的0001的长度也是可配置的,因为有一张表来进行维护 CREATE TABLE number_control (id bigint NOT NULL AUTO_INCREMENT COMMENT 主…

DW03D是一款用于锂离子/聚合物电池保护的高集成度解决方案。DW03D包含内部功率MOSFET、高精度电压检测电路和延迟电路

一般概述 DW03D产品是单节锂离子/锂聚合物可充电电池组保护的高集成度解决方案。DW03D包括了先进的功率MOSFET,高精度的电压检测电路和延时电路。 DW03D具有非常小的TSS08-8的封装,这使得该器件非常适合应用于空间限制得非常小的可充电电池组应用。…

生信软件25 - 三代测序数据灵敏比对工具ngmlr

1. ngmlr简介 CoNvex Gap-cost Ments for Long Reads(ngmlr)是一种长reads比对工具,可以将PacBio或Oxford Nanopore灵敏地与(大)参考基因组(比如人类参考基因组)对齐,能快速和正确地…

OpenSSH Server远程代码执行漏洞 (CVE-2024-6387)|centos7升级到最新版本OpenSSH-9.8.p1

一、漏洞概述 漏洞名称 OpenSSH Server远程代码执行漏洞 CVE ID CVE-2024-6387 漏洞类型 竞争条件 发现时间 2024-07-01 漏洞评分 暂无 漏洞等级 高危 攻击向量 网络 所需权限 无 利用难度 高 用户交互 无 PoC/EXP 未公开 在野利用 未发现 OpenS…

MechMind结构光相机 采图SDK python调用

测试效果 Mech-Mind结构光相机 Mech Mind(梅卡曼德)的结构光相机,特别是Mech-Eye系列,是工业级的高精度3D相机,广泛应用于工业自动化、机器人导航、质量检测等多个领域。以下是对Mech Mind结构光相机的详细解析&#…

阿里巴巴国际站携手NBA传奇托尼·帕克,中国卖家又一波利好!

在全球化浪潮日益汹涌的今天,跨界合作已成为推动品牌国际化进程的重要力量。近日,阿里巴巴国际站宣布了一项震撼业界的合作——正式签约NBA(美国职业篮球联赛)传奇控球后卫托尼帕克(Tony Parker)作为其全球…

2024年10款免费的项目管理软件推荐

本文向大家推荐10款2024年免费使用的项目管理软件,其中包括桌面应用和基于Web平台的多种产品,同时还涵盖了一些优秀的开源软件。 1.禅道开源项目管理软件 禅道是一款开源的、基于Web的项目管理软件,其功能丰富且操作简便,为团队提…

生产管理系统功能全拆解:哪些功能是企业真正需要的?

制造业的伙伴经常听到“生产管理”,但很多人可能只是模糊地知道它与工厂、生产线有关。那么,到底什么是生产管理呢?它的重要性又体现在哪里呢?接下来,我就以轻松的方式,带大家走进生产管理的世界&#xff0…

笔记:Qt开发之工程的多模块设计(pri)

目标:对于功能模块较多的Qt项目,使用pri文件管理模块文件,降低工程复杂度,提高软件模块的封装性和重用性。 一、知识储备 1.1 pro与pri文件 对于模块化编程,Qt提供了pro和pri,pro管理项目,pri…

算法 —— 模拟

目录 替换所有的问号 提莫攻击 Z字形变换 外观数列 各位读者有听说过“建模”一词吗?所谓“建模”,就是把事物进行抽象,根据实际问题来建立对应的数学模型。“抽象”并不意味着晦涩难懂;相反,它提供了大量的便利。…

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

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

Ubuntu编译PX4固件

目录 前言 准备编译参考 前言 要想自己编译PX4固件需要交叉编译器,交叉编译器可以将 x86架构 平台上写好程序编译出来,而编译出来的可执行文件是能用到 arm架构 的平台上。 本次编译是以 px4 v1.13.2 为例。 我的配置如下: 虚拟机 Ubuntu 18…

微气象仪的工作原理

型号推荐:云境天合TH-WQX5】风力发电传感器在风力发电系统中起着至关重要的作用,它们能够实时监测和记录各种关键参数,为风力发电机组的控制提供数据支持,从而确保风力发电系统的安全、高效运行。以下是对风力发电传感器的详细解析…

喜讯|华院计算法律大模型入围《2024大模型典型示范应用案例集》

2024年世界人工智能大会(WAIC)举办期间,中国信通院正式发布了《2024大模型典型示范应用案例集》(以下简称《案例集》)。该案例集由中国信通院华东分院、上海人工智能实验室主导,以产业化为导向,…

Vue从零到实战第一天

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

免费分享:中国冬小麦地图数据集(附下载方法)

小麦按播种和收获季节的不同,可分为春小麦和冬小麦两种。春小麦颗粒长而大,皮厚色泽深,蛋白质含量高,但筋力较差,出粉率低,吸水率高;冬小麦颗粒小,吸水率低,蛋白质含量较春小麦少&am…