Python 面向对象——1.基本概念

本章学习链接如下:

基本概念与语法

类(Class):定义了一组对象共有的属性和方法的蓝图。类是创建对象的模板。

对象(Object):类的实例。对象包含实际的数据和操作数据的方法。

属性(Attribute):对象的变量,用于存储数据。

方法(Method):属于对象的函数,用于定义对象的行为。

继承(Inheritance):允许一个类继承另一个类的属性和方法,从而促进代码的重用。

封装(Encapsulation):隐藏对象的内部细节,只通过定义好的接口与外界交互,这有助于降低系统的复杂性和增强安全性。

多态(Polymorphism):指允许使用对象的共同接口来访问不同的底层形式(数据类型)

 1.类和对象

这样干巴巴的解释非常的难以理解,我们可以把类想象成一个制造蛋糕的食谱。食谱上有制作蛋糕所需的原材料(属性)和制作步骤(方法)。这个食谱就是一个模板,告诉你如果按照特定的步骤操作,将得到什么样的蛋糕。运用不同的方法我们可以得到不同口味的蛋糕。

对象则是根据这个食谱实际制作出来的蛋糕。每次你使用这个食谱制作蛋糕,都会得到一个新的蛋糕实体,这就是一个对象。虽然每个蛋糕的基本结构相同(因为都是按照同一食谱来的),但你可以根据口味调整原料,比如加更多的糖或者少放点盐,这样每个蛋糕都有自己独特的风味,这些特定的风味和特征就是对象的属性。

比如现在我们需要写一个代码题目,有一个类叫做 Car,它定义了车辆的基本属性如品牌、颜色、速度,以及可以进行的操作如启动、停止等。当你创建一个具体的 Car 对象时,比如一个红色的丰田汽车,你就是根据 Car 类的食谱制作了一个蛋糕,这个蛋糕具体的是红色的,品牌是丰田。

我们一步步来做这个题目:


在指明类的属性中,我们用到的是类的构造函数,类的构造函数是一个非常重要的组件,它的主要作用是初始化新创建的对象的状态,构造函数被称为__init__方法。

(1)基本语法

构造函数

构造函数是通过定义一个名为 __init__ 的特殊方法实现的。这个方法会在类的对象被创建时自动调用。

  • class ClassName::定义了一个名为 ClassName 的类。
  • def __init__(self, param1, param2):是类的构造函数。__init__ 是一个由Python预定义的特殊方法(也称为魔术方法),用于初始化新创建的对象。
  • self:是一个指向实例本身的引用,用于访问类的属性和方法。
  • param1, param2:构造函数可以接受参数,这些参数在创建类的实例时提供,用于设置对象的初始状态或执行其他操作。
  • self.param1 = param1:这句话代码的作用是:将传入的参数赋值给实例的属性,这句话可能有些拗口,这是什么意思呢?
  • self.param1和param1的区别:我们可以看到这两个变量的位置,param1是构造函数__init__的变量,而self.param1是类中的变量,所以如果我们想要访问基于类所创建的对象的属性和方法时,必须经过变量self.×××。
class ClassName:def __init__(self, param1, param2):self.param1 = param1self.param2 = param2

如下代码所示:

  • 当创建一个 Person 类的实例时,如 person1 = Person('Alice', 30),构造函数 __init__ 被调用,其中的 nameage 参数分别被设置为 'Alice'30
  • self.name = nameself.age = age 这两句代码将这些参数值赋给实例的 nameage 属性。即作用为当我们创建类中不同的实例时,这些实例就已经拥有了类中的属性,不同的实例对于这些属性有不同的赋值,这意味着 在这个例子中,person1.name 将被设置为 'Alice'person1.age 被设置为 30
  • 这样设置后,这些属性可以在类的其他方法中被访问和使用,比如 display 方法可以打印出这些属性的值。
class Person:def __init__(self, name, age):self.name = nameself.age = agedef display(self):print(f"Name: {self.name}, Age: {self.age}")

2.属性和方法

关于属性之前我们介绍过了 。

类的属性

属性是类中定义的变量,用于存储对象的状态或数据。在类的实例中,每个属性可以有不同的值,即每个对象可以有自己的属性值。

类的方法

方法是定义在类中的函数,用于执行操作,可以访问和修改类的属性,或执行与类功能相关的任务。

基本语法
class ClassName:def method_name(self, parameter1, parameter2):# 方法体return some_value
具体实例

在这个示例中,Car 类有一个方法 describe,它返回一条描述该汽车的信息。这个方法使用了 self 关键字来访问实例的属性。 

class Car:def __init__(self, brand, color):self.brand = brandself.color = colordef describe(self):return f"This is a {self.color} {self.brand}."

实例,属性,方法的具体使用

这个代码示例展示了如何创建一个具有属性和方法的 Car 类。accelerate 方法用于增加汽车的速度,而 brake 方法用于停车。每个方法都通过 self 访问和修改了汽车的状态,展示了面向对象编程的封装特性 

class Car:def __init__(self, brand, color, speed=0):self.brand = brandself.color = colorself.speed = speeddef describe(self):return f"This is a {self.color} {self.brand}."def accelerate(self, amount):self.speed += amountreturn f"{self.brand} is now going {self.speed} km/h."def brake(self):self.speed = 0return f"{self.brand} has stopped."# 创建Car类的实例
my_car = Car("Toyota", "red")
print(my_car.describe())  # 调用方法
print(my_car.accelerate(50))  # 加速车辆
print(my_car.brake())  # 刹车停车

 


练习题

创建一个 Car 类的实例,名为 my_car,它是一个红色的丰田汽车。随后调用这个实例的启动、加速、减速和停止方法,以展示类的功能。通过这些操作,可以看到汽车状态的变化和如何通过类的方法控制这些状态。这是一个很好的面向对象编程(OOP)示例,展示了如何用Python来封装数据和功能。

1.指明类属性,指明car这个类的属性是品牌,颜色,初始速度为0.

class Car:def __init__(self, brand, color, speed=0):self.brand = brandself.color = colorself.speed = speed
  1. 构造函数:接受品牌、颜色和可选的初始速度参数,初始化汽车的基本属性。
  2. 启动方法 (start):将汽车的速度从0增加到10,并打印当前状态。
  3. 停止方法 (stop):将汽车的速度设置为0,并打印停车状态。
  4. 加速方法 (accelerate):接受一个增量参数,将此数值加到当前速度上,并打印新的速度。
  5. 减速方法 (decelerate):接受一个减速值,如果减速值大于当前速度,则调用停止方法;否则从当前速度中减去该值,并打印新的速度。

代码如下所示,并带有对应的注释。

class Car:def __init__(self, brand, color, speed=0):"""初始化一个新汽车,指定品牌、颜色和可选的初始速度。:param brand: String, 汽车的品牌。:param color: String, 汽车的颜色。:param speed: Integer, 汽车当前的速度,默认为0。"""self.brand = brandself.color = colorself.speed = speeddef start(self):"""启动汽车,将速度从0设置为默认的起始速度10。"""self.speed = 10print(f"已启动{self.color}色的{self.brand}汽车,当前速度为{self.speed}。")def stop(self):"""停止汽车,将速度设置为0。"""self.speed = 0print(f"{self.color}色的{self.brand}汽车已停止。")def accelerate(self, increase):"""增加汽车的速度。:param increase: Integer, 增加的速度量。"""self.speed += increaseprint(f"{self.color}色的{self.brand}汽车正在加速,当前速度为{self.speed}。")def decelerate(self, decrease):"""减少汽车的速度。:param decrease: Integer, 减少的速度量。"""if decrease > self.speed:print("减速量超过当前速度,汽车将停止。")self.stop()else:self.speed -= decreaseprint(f"{self.color}色的{self.brand}汽车正在减速,当前速度为{self.speed}。")# 创建一个具体的 Car 对象
my_car = Car('Toyota', 'red')# 使用 Car 对象的方法
my_car.start()
my_car.accelerate(20)
my_car.decelerate(10)
my_car.stop()

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

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

相关文章

unity学习(89)——unity塞满c盘!--删除editor下的log文件

卸了一个视频后强制续命打开详细信息: 这个再往下找也是没用的! 显示隐藏文件夹后!执行如下操作! 30个g! 其中unity占23g editer占了21g 删除C:\Users\王栋林\AppData\Local\Unity\Editor下的log文件 恢复到之前的水…

Android AIDL接口

一.AlDI接口简介 AIDL(Android Interface Definition Language)是一种 IDL 语言,用于生成可以在 Android 设备上两个进程之间进行进程间通信(IPC)的代码。 通过 AIDL,可以在一个进程中获取另一个进程的数据…

详细剖析多线程4----锁策略(八股文/面试常考)

文章目录 前言一、常见锁策略(八股文)1.1乐观锁和悲观锁1.2轻量级锁和重量级锁1.3自旋锁和挂起等待锁1.4普通互斥锁和读写锁1.5公平锁和非公平锁1.6可重入锁和不可重入锁1.7总结 二、synchronized内部原理三、CAS四、JUC(java.util.concurrent) 的常见类4.1Callable 接⼝4.2Ree…

【LLM】LLM API 开发

文章目录 LLM API 开发LLM入门基本概念LLM API使用实名认证创建应用使用API Prompt Engineering思考总结 参考文章 什么是提示工程(Prompt Engineering)? ChatGPT Prompt 最佳指南一 LLM API 开发 LLM入门基本概念 Prompt Prompt 最初是 NL…

嵌入式物联网实战开发笔记-乐鑫ESP32芯片功能对比以及功能选型【doc.yotill.com】

乐鑫ESP32入门到精通项目开发参考百例下载: 链接:https://pan.baidu.com/s/1ATvRnAZvxkev-PJfd3EAPg?pwd4e33 提取码:4e33 2.1 初识 ESP32 ESP32-S3 是一款低功耗的 MCU 系统级芯片 (SoC),支持 2.4 GHz Wi-Fi 和低功耗蓝牙 (…

windows驱动开发-WDM框架(一)

在前面的文章中解释过,NT5.0之后windows确定了新的架构Windows Driver Model (WDM),在Vista之后又推出了Windows Driver Framework(WDF),这两个都属于驱动程序框架,那么它们的之间的关系是怎样的? WDF是对WDM进行的封…

【数据结构(八)下】二叉树经典习题

❣博主主页: 33的博客❣ ▶文章专栏分类: Java从入门到精通◀ 🚚我的代码仓库: 33的代码仓库🚚 🫵🫵🫵关注我带你学更多数据结构的知识 1.前言 在上一篇文章中,博主已经分享了部分二叉树的经典习题&#xf…

安居水站:水站经营秘籍:年入30万不是梦。水站创业指南。

在这个快节奏的社会里,初创企业家们总是在寻找一条明路,以在竞争激烈的市场中立足。为了帮助他们更好地实现这一目标,我根据经验决定制定一份水站经营指导手册。这份手册将详细阐述如何从零起步,如何运营,如何进行市场…

c++11 标准模板(STL)本地化库 - 平面类别(std::collate) - 定义字典序比较和字符串的散列(二)

本地化库 本地环境设施包含字符分类和字符串校对、数值、货币及日期/时间格式化和分析,以及消息取得的国际化支持。本地环境设置控制流 I/O 、正则表达式库和 C 标准库的其他组件的行为。 平面类别 定义字典序比较和字符串的散列 std::collate 类 std::collate 封…

clickhouse学习笔记04

ClickHouse高可用之ReplicatedMergeTree引擎介绍 ClickHouse高可用架构准备-环境说明和ZK搭建 RPM安装ClickHouse 上传我们的clickhouse rpm文件。 安装: 中途需要输入用户名和密码 可以不设置 直接回车。 启动: 查看状态: 查看端口是否占用…

区间图着色问题:贪心算法设计及实现

区间图着色问题:贪心算法设计及实现 1. 问题定义2. 贪心算法设计2.1 活动排序2.2 分配教室2.3 算法终止 3. 伪代码4. C语言实现5. 算法分析6. 结论7. 参考文献 在本文中,我们将探讨如何使用贪心算法解决一个特定的资源分配问题,即区间图着色问…