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

    def 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 = brand
        self.color = color

    def 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 = brand
        self.color = color
        self.speed = speed
    
    def describe(self):
        return f"This is a {self.color} {self.brand}."


    def accelerate(self, amount):
        self.speed += amount
        return f"{self.brand} is now going {self.speed} km/h."

    def brake(self):
        self.speed = 0
        return 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 = brand
        self.color = color
        self.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 = brand
        self.color = color
        self.speed = speed

    def start(self):
        """
        启动汽车,将速度从0设置为默认的起始速度10。
        """
        self.speed = 10
        print(f"已启动{self.color}色的{self.brand}汽车,当前速度为{self.speed}。")

    def stop(self):
        """
        停止汽车,将速度设置为0。
        """
        self.speed = 0
        print(f"{self.color}色的{self.brand}汽车已停止。")

    def accelerate(self, increase):
        """
        增加汽车的速度。
        :param increase: Integer, 增加的速度量。
        """
        self.speed += increase
        print(f"{self.color}色的{self.brand}汽车正在加速,当前速度为{self.speed}。")

    def decelerate(self, decrease):
        """
        减少汽车的速度。
        :param decrease: Integer, 减少的速度量。
        """
        if decrease > self.speed:
            print("减速量超过当前速度,汽车将停止。")
            self.stop()
        else:
            self.speed -= decrease
            print(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()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

论文笔记:UrbanGPT: Spatio-Temporal Large Language Models

1 intro 时空预测的目标是预测并洞察城市环境随时间和空间不断变化的动态。其目的是预见城市生活多个方面的未来模式、趋势和事件,包括交通、人口流动和犯罪率。虽然已有许多努力致力于开发神经网络技术,以准确预测时空数据,但重要的是要注意…

展开说说:Android Fragment完全解析-卷一

1、是什么 Fragment 中文意思是碎片,Android 3.0推出的一个系统组件,主打一个在应用界面中可模块化又可重复使用。 Fragment 它很独立,它可以定义和管理自己的布局,具有自己的生命周期,并且可以处理自己的输入事件。…

iOS重签名-超详细,附排错

文章目录 重签名步骤步骤 1: 准备必要的材料步骤 2: 解压 .ipa 文件步骤3:将 Provisioning Profile 复制到 Payload 目录步骤 4: 移除原来的签名步骤 5: 使用新的证书和 Provisioning Profile 进行重签名步骤 6: 重新打包 .ipa 文件步骤 7: 安装和测试得到provisioning file和…

nginx反向代理及负载均衡

node1192.168.136.55Nginx主负载均衡器node3192.168.136.57Web01服务器node4192.168.136.58Web02服务器node5192.168.135.131客户端(测试) nginx反向代理 1. 安装nginx 三台机器都安装nginx yum install nginx -y 2. 配置用于测试的Web服务(以下操作…

C++ 协程 学习笔记

协程的优势就是比线程切换的时间少很多,协程的切换时间是纳秒,而进行切换的时间是微秒 单线程用协程可以轻松的处理并发任务 co_yield和co_await可以将协程暂停下来 resume又把协程激活 如果c函数里有co_await、co_return、co_yield就会自动判定为协程…

牛客-小乐乐与欧几里得

目录 题目 描述 输入描述: 输出描述: 示例1 示例2 解题 题目 描述 小乐乐最近在课上学习了如何求两个正整数的最大公约数与最小公倍数,但是他竟然不会求两个正整数的最大公约数与最小公倍数之和,请你帮助他解决这个问题。 …

计算机网络 -- 多人聊天室

一 程序介绍和核心功能 这是基于 UDP 协议实现的一个网络程序,主要功能是 构建一个多人聊天室,当某个用户发送消息时,其他用户可以立即收到,形成一个群聊。 这个程序由一台服务器和n个客户端组成,服务器扮演了一个接受…

【汇编语言】汇编语言程序

【汇编语言】汇编语言程序 文章目录 【汇编语言】汇编语言程序前言一、用汇编语言写的源程序汇编语言编写程序的工作过程程序中的三种伪指令源程序编译链接后变为机器码汇编程序的结构如何写出一个程序来程序中可能的错误 二、由源程序到程序运行由源程序到执行可执行文件的过程…

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

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

【深度学习-番外1】Win10系统搭建VSCode+Anaconda+Pytorch+CUDA深度学习环境和框架全过程

专栏的老读者们都知道,以前的文章以使用MATLAB的为多。 不过后续陆续开始展开深度学习算法的应用,就会逐渐引入Python语言了(当然MATLAB的代码也会同步更新),这是由于在深度学习领域,Python应用更为广泛。…

Matlab|【复现】主动配电网故障定位方法研究

目录 1 主要内容 算例模型 期望故障电流状态函数 评价函数(膨胀率函数) 算例验证方法 详实的文档说明 2 部分程序 3 程序结果 4 下载链接 1 主要内容 该程序方法复现了《基于改进多元宇宙算法的主动配电网故障定位方法研究》_郑聪,建…

在ELF 1开发环境中使用Qt Creator进行远程调试

Qt Creator是一款跨平台集成开发环境(IDE),主要适用于支持Qt框架的各类应用程序开发。其内置的远程调试机制使得开发者能够在本地开发环境中对部署在远程设备上的代码进行调试,无需直接对远程设备进行操作。Qt Creator会通过网络连…

2.Vue简介

Vue简介 Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面,V…

在 Linux 中删除文件和文件夹

目录 ⛳️推荐 前言 删除文件 🏋️练习文件删除 小心删除 删除目录 🏋️练习文件夹删除 测试你的知识 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到…

VSCode搭建内核源码阅读开发环境

0. 参考链接 使用VSCode进行linux内核代码阅读和开发_vscode阅读linux内核-CSDN博客 1. 搭建Linux内核源码阅读环境 现状,Linux内核源码比较庞大文件非常多,其中又包含的众多的宏定义开关配置选项,这使得阅读内核源代码称为一件头疼的事。 …

电脑工作者缓解眼部疲劳问题的工具分享

背景 作为以电脑为主要工作工具的人群,特别是开发人员,我们每天都需要长时间紧盯着屏幕,进行代码编写、程序调试、资料查询等工作。这种持续的工作模式无疑给我们的眼睛带来了不小的负担。一天下来,我们常常会感到眼睛干涩、疲劳…

[笔试强训day02]

文章目录 BC64 牛牛的快递DP4 最小花费爬楼梯[编程题]数组中两个字符串的最小距离 BC64 牛牛的快递 BC64 牛牛的快递 #include<iostream> #include<cmath> using namespace std;double a; char b;int main() {cin>>a>>b;int ans0;if(a<1.0){ans20;…

Go程序设计语言 学习笔记 第十三章 低级编程

Go的设计保证了一系列安全性&#xff0c;限制了Go程序可能出现问题的方式。在编译期间&#xff0c;类型检查会检测到大多数试图将操作应用于不适合其类型的值的尝试&#xff0c;例如&#xff0c;从一个字符串中减去另一个字符串。严格的类型转换规则阻止了直接访问内置类型&…

数字接龙(蓝桥杯)

文章目录 数字接龙【问题描述】解题思路DFS 数字接龙 【问题描述】 小蓝最近迷上了一款名为《数字接龙》的迷宫游戏&#xff0c;游戏在一个大小为N N 的格子棋盘上展开&#xff0c;其中每一个格子处都有着一个 0 . . . K − 1 之间的整数。游戏规则如下&#xff1a; 从左上…

【图解计算机网络】从浏览器地址输入到网页显示的整个过程

从浏览器地址输入到网页显示的整个过程 整体流程DHCPhttp协议报文组装DNSTCP协议封装与TCP三次握手IP协议封装与路由表MAC地址与ARP协议交换机路由器 整体流程 从往浏览器输入一个地址到网页的显示&#xff0c;要经过很长的一个流程&#xff0c;中间涉及到计算机网络的许多知识…