当前位置: 首页 > news >正文

Python 06 之面向对象基础

😀前言
在日常编程和软件开发中,我们通常会遇到各种各样的问题,其中很多问题都可以通过面向对象的程序设计方法来解决。面向对象编程不仅可以使代码更加组织化和系统化,而且还可以提高代码的重用性和可维护性。
.
在本教程中,我们将探索Python语言中面向对象编程的基本概念。我们将从最基本的类和对象的定义开始,然后深入探讨类的属性和方法,以及如何使用特殊的类方法来控制对象的初始化、表示和销毁过程。
.
我们将通过实际的代码示例来逐一讨论这些概念,以帮助你更好地理解和掌握Python的面向对象编程。

🏠个人主页:尘觉主页
在这里插入图片描述

🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力😉😉

在csdn获奖荣誉: 🏆csdn城市之星2名
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 💓Java全栈群星计划top前5
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 🤗 端午大礼包获得者
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 🥰阿里云专家博主
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 😉亚马逊DyamoDB结营

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰
如果文章有什么需要改进的地方还请大佬不吝赐教 先在次感谢啦😊

文章目录

  • Python 06 之面向对象基础
  • 1、概念
    • 1.1 面向函数的编程方式:
    • 1.2 ⾯向对象的编程方式
    • **1.3 类和对象的概念**
    • **1.4 类和对象的关系**
    • **1.5 类的设计**
    • **1.6 属性和⽅法的确定**
  • 2、语法
    • **2.1、 class 关键字**
    • **2.2 创建一个对象**
    • 2.3 方法中的 self 参数
  • 3、 init方法
    • 3.1 iniit 初始化方法
  • 4、del 方法
  • 5、str 方法
    • 😄总结

Python 06 之面向对象基础

1、概念

1.1 面向函数的编程方式:

1、把某个需求的所有步骤,比如加减乘除,从头到尾逐步实现;

2、根据开发需求,将某些功能独立的代码。比如加法,封装成一个又一个函数。

3、最后,我们就是有顺序的调用不同的函数就可以了。

1.2 ⾯向对象的编程方式

相⽐较函数,⾯向对象是更⼤的封装,根据职责在⼀个对象中封装多个⽅法

  1. 在完成某⼀个需求前,首先确定职责 —— 要做的事情(⽅法) ;

  2. 根据职责确定不同的对象,在对象内部封装不同的⽅法;

  3. 最后完成的代码,就是顺序地让不同的对象调⽤不同的⽅法。

1.3 类和对象的概念

类和对象是⾯向对象编程的两个核⼼概念。

类:类是对⼀群具有相同特征或者⾏为的事物的⼀个统称,是抽象的,不能直接使⽤ 。

比如,人相当于一个类:身高,性别,年龄。这些特征称为属性,而吃饭,跑步,喝水,这些行为则称为方法。

对象:对象是由类创建出来的⼀个具体存在,可以直接使⽤。

由哪⼀个类创建出来的对象,就拥有在哪⼀个类中定义的 属性 和⽅法 。

1.4 类和对象的关系

类是模板,对象是根据类这个模板创建出来的,应该先有类,再有对象 ;

  • 类只有⼀个,⽽对象可以有很多个 ;
  • 不同的对象之间属性可能会各不相同 ;
  • 类中定义了什么属性和⽅法,对象中就有什么属性和⽅法,不可能多,也不可能少 。

1.5 类的设计

在程序开发中,要设计⼀个类,通常需要满⾜⼀下三个要素:

  1. 类名 这类事物的名字 ; 人
  2. 属性 这类事物具有什么样的特征 ; 身高,年龄。性别
  3. ⽅法 这类事物具有什么样的⾏为。 吃,喝,玩,乐。

1.6 属性和⽅法的确定

  1. 对于对象的特征描述,通常可以定义成属性 ,属性的具体实现可以是一个 变量;
  2. 对象具有的⾏为(动词),通常可以定义成⽅法,方法的具体实现可以是一个类里面的函数 ;

注:需求中没有涉及的属性或者⽅法在设计类时,不需要考虑。

2、语法

2.1、 class 关键字

class 关键字用于创建一个类,语法如下:

class 类名: def ⽅法 1(self, 参数列表): pass

⽅法的定义格式和之前学习过的函数⼏乎⼀样 ;

区别在于第⼀个参数必须是 self 。

示例:

class Cat:def eat(self, name):print(name + "吃饭")def drink(self, name):print(name + "喝水")

2.2 创建一个对象

  1. 实例------通过类创建出来的对象叫做类的实例;
  2. 实例化------创建对象的动作叫做实例化 。

语法:

对象名 = 类名(参数列表)

# 定义Cat类
class Cat:def eat(self, name):print(name + "吃饭")def drink(self, name):print(name + "喝水")# 创建Cat 类
cat = Cat();
# 调用Cat 吃饭的方法
cat.eat("小白");
# 调用Cat 喝水的方法
cat.drink("小黑")

image-20230903170058678

2.3 方法中的 self 参数

  • 在类封装的⽅法内部, self 就表示调用方法的对象自己 ;

  • 调⽤⽅法时,不需要传递 self 参数 ;

  • 在方法内部可以通过 self. 访问对象的属性;

    • 通过在方法内部使用 self.属性名 = 值,为类添加属性
  • 在方法内部可以通过 self. 调⽤对象的⽅法;

  • 在类的外部,通过 对象名. 访问对象的属性和⽅法 。

# 定义Cat类
class Cat:def set_name(self, name):self.name = namedef eat(self):print(self.name + "吃饭")def drink(self):print(self.name + "喝水")# 创建Cat 类
cat = Cat();
# 调用 set_name 方法
cat.set_name("小白")
# 调用Cat 吃饭的方法
cat.eat();
# 调用Cat 喝水的方法
cat.drink()

image-20230903170119013

3、 init方法

3.1 iniit 初始化方法

init就是对象的初始化⽅法, init 是对象的内置⽅法。

当使⽤ 类名() 创建对象时,会自动执⾏以下操作:

  1. 为对象在内存中分配空间 —— 创建对象 ;

  2. 系统自动调用⽅法(__ init__ ) .

# 定义Cat类
class Cat:def __init__(self):self.name = '小白'def eat(self):print(self.name + "吃饭")def drink(self):print(self.name + "喝水")# 创建Cat 类 初始化方法被自动调用
cat = Cat();
# 调用Cat 吃饭的方法
cat.eat();
# 调用Cat 喝水的方法
cat.drink()

带有参数的初始化方法。

image-20230903170217320

4、del 方法

  1. del方法只能有一个参数 self;

  2. 当对象在内存中被销毁的时候,del方法被系统自动调用;

  3. 当使⽤ 类名() 创建对象时,为对象分配完空间后,⾃动调⽤ init ⽅法 ;

  4. 当⼀个对象被从内存中销毁前,会⾃动调⽤ del ⽅法 ;

  5. ⼀个对象的 del ⽅法⼀旦被调⽤,对象的生命周期结束 。

# 定义Cat类
class Cat:def __init__(self,name = "小白"):self.name = namedef __del__(self):print(self.name+"活动已结束,已回窝睡觉")def eat(self):print(self.name + "吃饭")def drink(self):print(self.name + "喝水")# 创建Cat 类
cat = Cat();
# 调用Cat 吃饭的方法
cat.eat();
# 调用Cat 喝水的方法
cat.drink()

image-20230903170240145

在函数内定义的变量,函数执行完毕,变量就被销毁了;

在函数外部定义的变量,程序执行完毕,变量就被销毁了;

5、str 方法

在 Python 中,使⽤ print 输出 对象变量,默认情况下,会输出这个变量 引⽤的对象是由哪⼀个类创建的对象,以及在内存中的地址(⼗六进制表示)。

# 定义Cat类
class Cat:def __init__(self,name = "小白"):self.name = name# 创建Cat 类
cat = Cat();
# 打印
print(cat)

主要下面的这个内存中的地址每次个机器的不是一样的取决的机器的内存和分配策略 这个不要担心

image-20230903170421431

如果在开发中,希望使⽤ print 输出对象变量时,能够打印⾃定义的内容, 就可以利⽤ str 这个内置⽅法了。

注: str ⽅法必须返回⼀个字符串

# 定义Cat类
class Cat:def __init__(self, name="小黄"):self.name = namedef __str__(self):return "我是一只可爱的狗狗,名字叫" + self.name# 创建Cat 类
cat = Cat();
print(cat)

能够打印⾃定义的内容, 就可以利⽤ str 这个内置⽅法了。

注: str ⽅法必须返回⼀个字符串

# 定义Cat类
class Cat:def __init__(self, name="小黄"):self.name = namedef __str__(self):return "我是一只可爱的狗狗,名字叫" + self.name# 创建Cat 类
cat = Cat();
print(cat)

image-20230903170630263

😄总结

通过本教程,我们已经了解了Python面向对象编程的核心概念,包括类和对象的定义和关系,以及类的特殊方法如__init__、__str__和__del__方法。

我们学习了如何创建类和对象,如何定义和调用方法,以及如何通过特殊方法来控制对象的创建和销毁过程。我们还学习了如何通过__str__方法来定制对象的字符串表示形式,使其更符合人类的理解和阅读。

希望通过本教程,你已经掌握了Python面向对象编程的基本知识,这将为你后续的Python编程之旅奠定坚实的基础。

😁热门专栏推荐
想学习vue的可以看看这个

java基础合集

数据库合集

redis合集

nginx合集

linux合集

手写机制

微服务组件

spring_尘觉

springMVC

mybits

等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持

🤔欢迎大家加入我的社区 尘觉社区

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

相关文章:

Python 06 之面向对象基础

😀前言 在日常编程和软件开发中,我们通常会遇到各种各样的问题,其中很多问题都可以通过面向对象的程序设计方法来解决。面向对象编程不仅可以使代码更加组织化和系统化,而且还可以提高代码的重用性和可维护性。 . 在本教程中&…...

去除pdf/word的水印艺术字

对于pdf中的水印如果无法去除水印,则先另存为word,然后再按下面办法处理即可: 查看宏,创建:删除艺术字 添加内容: Sub 删除艺术字()Dim sh As ShapeFor Each sh In ActiveDocument.ShapesIf sh.Type msoT…...

【Linux】使用 Alist 实现阿里云盘4K播放

一、安装 Alist 官方文档 默认安装在 /opt/alist 中 curl -fsSL "https://alist.nn.ci/v3.sh" | bash -s install自定义安装路径,将安装路径作为第二个参数添加,必须是绝对路径,如果路径以 alist 结尾,则直接安装到给定…...

Gof23设计模式之状态模式

1.概述 【例】通过按钮来控制一个电梯的状态,一个电梯有开门状态,关门状态,停止状态,运行状态。每一种状态改变,都有可能要根据其他状态来更新处理。例如,如果电梯门现在处于运行时状态,就不能…...

如何免费下载RunWayML产生的视频文件

问题: 首先没有下载的按钮。 其次如果直接“视频另存为”菜单,报错。 解决方案: 1)复制视频链接。 2)新开chrome,在url中粘贴上一步的url路径。 3)当看到视频后,在视频上面右键“…...

9.14 C++作业

仿照vector手动实现自己的myVector&#xff0c;最主要实现二倍扩容功能 #include <iostream>using namespace std;template <typename T> class Myvector {T *data; //存储数据的数组int len; //当前数组的长度int mycapa; //容纳数据的总容量public://…...

java关于文件记录篇章之文件夹创建篇

今天&#xff0c;创建一个文件夹目录的时候&#xff0c;创建多级目录的时候发现&#xff0c;自己老是创建失败&#xff0c;但是系统显示文件夹创建成功&#xff0c;但是你去找文件夹的时候&#xff0c;又发现创建失败&#xff0c;这里在我成功之后封装了一个创建文件夹的创建对…...

显示器显示的画面突然偏红色如何解决

显示器显示的画面突然偏红色如何解决 1. 概述2. 解决方法结束语 1. 概述 显示器显示的画面突然偏红色 &#xff0c;使用向日葵远程电脑&#xff0c;看到的画面是正常的&#xff0c;但是显示器上的画面确还是骗红的&#xff0c;这时候就需要看一下是不是开启了系统也夜间模式&a…...

【element-ui】 el-table 表格动态合并相同数据单元格最全教程,可指定列+自定义合并条件,附完整代码

el-table合并单元格 1.固定合并 官方挺提供的合并具体某行列的方法:el-table合并行或列通过给table传入span-method方法可以实现合并行或列,方法的参数是一个对象,里面包含当前行row、当前列column、当前行号rowIndex、当前列号columnIndex四个属性。 该函数可以返回一个包含…...

管理方法论:6. 正视团队冲突——化解危机,长治久安

概念 团队冲突指的是两个或两个以上的团队在目标、利益、认识等方面互不相容或互相排斥&#xff0c;从而产生心理或行为上的矛盾&#xff0c;导致抵触、争执或攻击事件。 参考&#xff1a; https://baike.baidu.com/item/%E5%9B%A2%E9%98%9F%E5%86%B2%E7%AA%81/6747073 htt…...

基于SpringBoot的一套强大后台管理系统

概述 一个功能强大而完善的后台管理系统框架&#xff0c;用户可基于此框架进行二次开发&#xff0c;定制成符合自己的需求的后台管理系统&#xff01; 详细 运行截图&#xff1a; 项目结构&#xff1a; 详细说明&#xff1a; 环境说明&#xff1a; jdk1.8mavenMySQL5.7 项…...

音乐项目后台管理系统出现的问题

1.当对歌手的歌曲进行编辑时候&#xff0c;会把所有的歌曲信息给修改了。 解决方法:修改controller层的中SongController代码中的这一行代码 boolean flag songService.updateById(song); 2.添加歌曲&#xff0c;在弹出框中输入&#xff0c;没有显示。原因&#xff1a;前端页…...

数据结构——图(图的存储及基本操作)

文章目录 前言一、邻接矩阵法&#xff08;顺序存储&#xff09;1.无向图存储邻接矩阵算法2.有向图存储邻接矩阵算法 二、邻接表法(图的链式存储结构)总结 前言 邻接矩阵法(图的顺序存储结构) 1.1 无向图邻接矩阵算法 1.2 有向图邻接矩阵算法邻接表法(图的一种链式存储结构) 一…...

2023年项目管理工具使用趋势分析及预测

随着技术的不断进步以及工作和领导态度的演变&#xff0c;各个行业都在经历着深刻的变革。项目管理领域同样如此&#xff0c;团队项目的技术和人员管理风格及策略正在不断地调整与优化&#xff0c;以适应新冠疫情后所呈现出的新的工作场所格局。在此背景下&#xff0c;以下是我…...

Vue3 实现一个无缝滚动组件(支持鼠标手动滚动)

Vue3 实现一个无缝滚动组件&#xff08;支持鼠标手动滚动&#xff09; 前言 在日常开发中&#xff0c;经常遇到需要支持列表循环滚动展示&#xff0c;特别是在数据化大屏开发中&#xff0c;无缝滚动使用频率更为频繁&#xff0c;在jquery时代&#xff0c;我们常用的无缝滚动组…...

【IP数据报】IP地址和MAC地址的区别

1、用IP地址来标识Internet的主机 在每个IP数据报中&#xff0c;都会携带源IP地址和目标IP地址来标识该IP数据报的源和目的主机。IP数据报在传输过程中&#xff0c;每个中间节点(IP 网关)还需要为其选择从源主机到目的主机的合适的转发路径(即路由)。IP协议可以根据路由选择协…...

高并发笔记

如何设计一个高并发系统&#xff1f;&#xff1a;https://mp.weixin.qq.com/s/yFc-70DEhloWn0G3GDa6Yw 分布式 ID 服务实践&#xff1a;https://mp.weixin.qq.com/s/KAts9Zjj8JpEd0Q6pqLlgQ 一文聊透布隆过滤器&#xff1a;https://mp.weixin.qq.com/s/qJ2fDm1Z57bPSzOBrgiqfg …...

eNSP网络学习

一、eNSP 1.什么是eNSP eNSP(Enterprise Network Simulation Platform)是一款由华为提供的免费的、可扩展的、图形化操作的网络仿真工具平台&#xff0c;主要对企业网络路由器、交换机进行软件仿真&#xff0c;完美呈现真实设备实景&#xff0c;支持大型网络模拟&#xff0c;让…...

广州xx策划公司MongoDB恢复-2023.09.09

2023.09.08用户的MongoDB数据库被勒索病毒攻击&#xff0c;数据全部被清空。 提示&#xff1a; mongoDB的默认端口为27017&#xff0c;黑客通常通过全网段扫描27017是否开放判断是否是MongoDB服务器。一旦发现27017开放&#xff0c;黑客就会用空密码、弱密码尝试连接数据库。黑…...

golang --- module-aware 模式下 包引入

一、文件列表如下 其中helloWorld目录是main包&#xff08;package&#xff09;所在目录&#xff0c;即该目录下所有的goy源文件&#xff08;不包含子目录&#xff09;属于main包&#xff0c;hello.go是mian函数所在文件 二、module-aware 模式启用 开启mod模式 go env -w G…...

从原理到实践 | Pytorch tensor 张量花式操作

文章目录 1.张量形状与维度1.1标量&#xff08;0维张量&#xff09;&#xff1a;1.2 向量&#xff08;1维张量&#xff09;&#xff1a;1.3矩阵&#xff08;2维张量&#xff09;&#xff1a;1.4高维张量&#xff1a; 2. 张量其他创建方式2.1 创建全零或全一张量&#xff1a;2.2…...

无涯教程-JavaScript - TRANSPOSE函数

描述 TRANSPOSE函数将单元格的垂直范围作为水平范围返回,反之亦然。必须将TRANSPOSE函数作为数组公式输入,该范围必须具有与行范围和列范围相同的行和列数。 您可以使用TRANSPOSE在工作表上移动数组或范围的垂直和水平方向。 语法 TRANSPOSE (array)键入函数后,按CTRL SHI…...

Webserver项目解析

一.webserver的组成部分 Buffer类 用于存储需要读写的数据 Channel类 存储文件描述符和相应的事件&#xff0c;当发生事件时&#xff0c;调用对应的回调函数 ChannelMap类 Channel数组&#xff0c;用于保存一系列的Channel Dispatcher 监听器&#xff0c;可以设置为epo…...

Spring Cloud 篇

1、什么是SpringCloud &#xff1f; Spring Cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序&#xff0c;提供与外部系统的集成。Spring cloud Task&#xff0c;一个生命周期短暂的微服务框架&#xff0c;用于快速构建执行有限数据处理的应用程序。 2、什么…...

vim,emacs,verilog-mode这几个到底是啥关系?

vim&#xff1a;不多说了被各类coder誉为地表最强最好用的编辑器&#xff1b;gvim&#xff0c;gui vim的意思&#xff1b; emacs&#xff1a;也是一个编辑器&#xff0c;类似vscode&#xff1b; vim在使用的时候为了增强其功能&#xff0c;有好多好多插件&#xff0c;都是以.…...

解决npm run build 打包出现XXXX.js as it exceeds the max of 500KB.

问题描述&#xff1a; npm run build 时出现下面的问题&#xff1a; Note: The code generator has deoptimised the styling of D:\base\node_modules\_element-ui2.15.12element-ui\lib\element-ui.common.js as it exceeds the max of 500KB.在项目的根目录加粗样式下找到 …...

Java 抖音小程序SDK

抖音小程序SDK&#xff0c;抖音SDK 码云地址&#xff1a;dy-open-sdk: 字节跳动&#xff0c;抖音小程序sdk...

Vue.js的服务器端渲染(SSR):为什么和如何

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…...

Gin 打包vue或react项目输出文件到程序二进制文件

Gin 打包vue或react项目输出文件到程序二进制文件 背景解决方案1. 示例目录结构2. 有如下问题要解决:3. 方案探索 效果 背景 前后端分离已成为行业主流&#xff0c;vue或react等项目生成的文件独立在一个单独目录&#xff0c;与后端项目无关。 实际部署中&#xff0c;通常前面套…...

深度解析shell脚本的命令的原理之pwd

pwd是Print Working Directory的缩写&#xff0c;是一个Unix和Linux shell命令&#xff0c;用于打印当前工作目录的绝对路径。以下是对这个命令的深度解析&#xff1a; 获取当前工作目录&#xff1a;pwd命令通过调用操作系统提供的getcwd&#xff08;或相应的&#xff09;系统调…...

织梦教育网站开发/推广计划方案模板

Servlet采用单实例多线程方式运行&#xff0c;因此是线程不安全的。默认情况下&#xff0c;非分布式系统&#xff0c;Servlet容器只会维护一个Servlet的实例&#xff0c;当多个请求到达同一个Servlet时&#xff0c;Servlet容器会启动多个线程分配给不同请求来执行同一个Servlet…...

godaddy做网站/电脑优化设置

今天出于某些原因从mongodb数据库中导出了一些数据&#xff0c;为了更直观的发送给其他人查阅&#xff0c;便使用mongoVUE的导出为excel功能。但是导出后出现了一个问题&#xff0c;里边有一列存储时间的&#xff0c;存储的是long型毫秒数&#xff0c;在导出后就自动变成了科学…...

百度推广让我先做虚拟网站后/搜索网站关键词

一&#xff0c;贝叶斯决策论 贝叶斯决策论是概率框架下实施决策的基本方法。对分类任务来说&#xff0c;在所有相关概率都已知的情况下&#xff0c;贝叶斯决策论考虑如何基于这些概率和误判损失来选择最优的类别标记。 具体来说&#xff0c;若目标是最小化分类错误率&#xff…...

360crm客户管理系统/谷歌seo靠谱吗

用户编程接口 库函数调用与系统调用 库函数是语言或应用程序的一部分&#xff0c;它是高层的、完全运行在用户空间、为程序员提供调用真正的在幕后完成实际事务的系统调用接口。而系统函数是内核提供给应用程序的接口&#xff0c;属于系统的一部分。简单说&#xff0c;函数库…...

国内做的比较好的协会网站/厦门seo排名

二叉树的前序、中序、后序遍历方式&#xff0c;递归与非递归。&#xff08;层序遍历的方式已经在之前的博客中写过&#xff09; 递归方式比较简单。 前序遍历&#xff1a; void preorder(TreeNode* root){if (root){cout << root -> val << endl;preorder(root …...

做网购的有哪几个网站/东莞seo管理

用JQuery Validate框架&#xff0c;在IE8下验证报错问题解决参考文章&#xff1a; &#xff08;1&#xff09;用JQuery Validate框架&#xff0c;在IE8下验证报错问题解决 &#xff08;2&#xff09;https://www.cnblogs.com/destimarve/p/5511257.html 备忘一下。...