详解Python面向对象编程(一)

类和对象

面向过程——怎么做?
(1)把完成某一需求的所有步骤、从头到尾,逐步实现
(2)根据开发需求,将某些功能独立的代码块封装成一个又一个的函数
(3)最后完成的代码,就是顺序地调用不同的函数
面向对象——谁来做?
(1)在完成某一需求之前,首先确定职责——要做的事情(方法)
(2)根据职责确定不同的对象,在各个对象内封装不同的方法(赋予每个对象不一样的能力,从而承担不一样的职责)
(3)最后完成代码,就是顺序地让不同的对象调用不同的方法
总结:相比较函数封装,对象是更大的封装,不仅将功能独立的代码块封装成一个方法,更将多个方法封装到一个对象中
0-1、类(一张飞机的设计图纸)
是对具有相同特征和行为的一类事物的统称,是抽象的,不能直接使用的;可以看作一个模板,是负责创建对象的
特征:属性
行为:方法
0-2、对象(根据设计图纸,制造的一辆真实的飞机)
是由类创建出来的一个具体存在,是可以直接使用的;
由哪一个类创建出来的对象,就具有哪一个类的属性和方法
0-3、类和对象的关系
程序开发中,先有类,再有对象
类只有一个,而对象可以有多个;
类中定义了什么属性和方法,对象中就有什么属性和方法;
不同的对象之间属性的具体值(形参)可以是各不相同的(比如由同一张图纸创建出来的三辆飞机颜色可能各不相同)
0-4、类的设计
先确定需要哪些类;一个类需要包含以下三个元素:
(1)类名:这类事物的名字
大驼峰命名法:每一个单词的首字母大写,单词与单词之间无下划线
(2)属性:这类事物具有什么样的特征(常用名词命名)
对象具有的特征(名词),通常可以定义为属性
(3)方法:这类事物具有什么样的行为(常用动词命名)
对象具有的动作(动词),通常可以定义为方法
例子:
在这里插入图片描述

面向对象的基础语法

1-1、 dir()内置函数
在python中,变量、数据和函数都是对象,调到用dir()函数可以查看对象内的所有属性和方法
如:dir(demo) 会返回demo这个类的所有属性和方法
其中:方法名 格式的方法是python内置的方法/属性
在这里插入图片描述
1-2、定义简单的类*
在一个类中封装多个方法,这样通过这个类创建的对象就可以直接调用这些方法
(1)定义只包含方法的类

class 类名:def 方法名一(self,参数列表)passdef 方法名二(self, 参数列表)pass

(2)创建对象

对象变量 = 类名()

(3)第一个面向对象的程序
例子:小猫爱喝水,小猫爱吃鱼
分析:定义一个猫类;定义两个方法(eat、drink);按照需求,不需要定义属性

class Cat:def eat(self):print("小猫爱吃鱼")def drink(self):print("小猫爱喝水")
# 创建猫对象(等号右边负责创建对象,等号左边负责对这个对象进行引用)
tom = Cat()
# 调用猫方法
tom.eat()
tom.drink()
# 返回tom对象是由哪一个类创建的以及这个对象在内存中的地址
print(tom)
# 返回tom对象的地址(16进制)
addr = id(tom)
# 转换为10进制
print("%d" % addr)
# 转化为16进制
print("%x" % addr)

在这里插入图片描述
(4)案例改造-给对象增加属性
方法:在类外部代码上直接通过 :对象名.新增属性名 = 属性值
在这里插入图片描述这种方法简单,但不推荐使用,因为对象的属性和方法应当封装在类的内部,而不应该在类的外部来添加
在这里插入图片描述
并且lazy_cat的并没有增加属性name,说明各个对象之间是相互独立的,对一个对象进行增加属性的操作并不会影响其他的对象。

1-3、self是什么
——在类封装的内部,self就表示当前调用方法/属性的对象自己;
self就是创建的对象本身,哪一个对象调用这个方法,self就是哪一个对象的引用
在这里插入图片描述
1-4、 在类的外部给对象增加属性的问题
在这里插入图片描述
会出现找不对该属性的问题,因此对象需要包含哪些属性,应该封装在类的内部!

初始化方法

2-1 、什么是初始化方法
当使用类名创建对象时,会自动执行以下操作:
(1)创建对象——为对象在内存中分配空间
(2)初始化方法(init)——为对象的属性设置初始值
init:内置的方法,专门用来定义一个类具有哪些属性的方法
在这里插入图片描述
2-2 、在初始化方法内部定义属性
(1)在__init__方法内部使用 self.属性名 = 属性的初始值 就可以定义属性
(2)定义属性之后,使用该类创建的对象,都会拥有该属性
在这里插入图片描述
2-3 、__str__方法
在用print输出对象变量时,能够打印自定义的内容,该方法必须返回一个字符串:
在这里插入图片描述
2- 4、 案例
在这里插入图片描述
总结:在对象的方法内部,是可以直接访问对象的属性的;
同一个类创建的各个对象之间是互不干扰的;

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

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

相关文章

【Unity3D小功能】Unity3D中实现点击‘文字’出现‘UI面板’

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址QQ群:398291828 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 宠粉博主又来了,今天有粉丝问我如何实…

群晖NAS安装Video Station结合内网穿透实现公网访问本地影音文件

文章目录 1.使用环境要求:2.下载群晖videostation:3.公网访问本地群晖videostation中的电影:4.公网条件下使用电脑浏览器访问本地群晖video station5.公网条件下使用移动端(搭载安卓,ios,ipados等系统的设备…

GitHub加速访问最简单的方法

Github是全球最大的代码开源平台,对于编程的小伙伴来说,这是一个巨大的宝库,也是编程学习的圣地。很对小伙伴在使用GitHub时会经常出现无法访问Github的情况。 一、解决方法——>修改hosts文件 通过 IP查询工具来获取当前Github网站的真实…

Android14之深入理解sp模板类(二百零二)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

【机器学习】引领未来的力量:技术革新与应用探索

🧑 作者简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟。提供嵌入式方向的学习指导、简历面…

【No.17】蓝桥杯图论上|最短路问题|Floyd算法|Dijkstra算法|蓝桥公园|蓝桥王国(C++)

图的基本概念 图: 由点(node,或者 vertex)和连接点的边(edge)组成。图是点和边构成的网。 树:特殊的图树,即连通无环图树的结点从根开始,层层扩展子树,是一种层次关系,这种层次关系&#xff0…

铁道障碍物检测6种YOLOV8

铁道障碍物检测6种,采用YOLOV8训练,得到PT模型,然后转换成ONNX模型,OPENCV调用 铁道障碍物检测6种YOLOV8

开发者的瑞士军刀:DevToys

DevToys: 一站式开发者工具箱,打造高效创意编程体验,让代码生活更加得心应手!—— 精选真开源,释放新价值。 概览 不知道大家是否在windows系统中使用过PowerToys?这是微软研发的一项免费实用的系统工具套…

css3鼠标悬停图片特效,图片悬停效果源码

特效介绍 css3鼠标悬停图片特效,图片悬停效果源码,可以在网页上面作为自己的动态加载名片,放到侧边栏或者网站合适的位置即可 动态效果 代码下载 css3鼠标悬停图片特效,图片悬停效果源码

解决mysql问题: this is incompatible with sql_mode=only_full_group_by

今天在部署一趟测试环境的服务,各种配置文件都配好了,启动服务后台报错,解决后记录一下,小伙伴们也可以看看! ### Cause: java.sql.SQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause…

代码随想录算法训练营第四十六天|139.单词拆分、56. 携带矿石资源(第八期模拟笔试)

139.单词拆分 刷题https://leetcode.cn/problems/word-break/description/文章讲解https://programmercarl.com/0139.%E5%8D%95%E8%AF%8D%E6%8B%86%E5%88%86.html视频讲解https://www.bilibili.com/video/BV1pd4y147Rh/?vd_sourceaf4853e80f89e28094a5fe1e220d9062 题解&…

C语言:给结构体取别名的4种方法

0 前言 在进行嵌入式开发的过程中,我们经常会见到typedef这个关键字,这个关键字的作用是给现有的类型取别名,在实际使用过程中往往是将一个复杂的类型名取一个简单的名字,便于我们的使用。就像我们给很熟的人取外号一样&#xff…

无人驾驶(移动机器人)路径规划之A star(Tie Breaker)算法及其matlab实现

在自动驾驶与移动机器人路径规划时,必定会用到经典的算法A star。下面是我未加入与加入Tie Breaker 的matlab实现效果。可以发现加入Tie Breaker之后效果明显改善。 目录 一、效果比较 1.未加入Tie Breaker(黑色为障碍物,菱形绿色为目标点…

python3游戏GUI--开心打地鼠游戏By:PyQt5(附下载地址)

文章目录 一.前言二.游戏预览1.启动2.开始游戏3.游戏结束4.排行榜 三.游戏思路四.总结 一.前言 第一次用PyQt做游戏,有点小紧张呢。本次使用PyQt5制作一款简单的打地鼠游戏,支持基本游戏玩法、…

Bytebase 签约 PropertyGuru,助力东南亚最大地产科技平台跨国多地数据库变更自动化

PropertyGuru 是东南亚最大的在线房地产平台,于2022年于纽交所📈上市,总部位于新加坡 🇸🇬。公司利用先进的技术,建立了一个连接多方的在线房产平台,一方面为中介代理商、开发商、银行等机构提供…

Kimi是什么?免费Kimi chat介绍

1. Kimi是什么? Kimi是由月之暗面科技有限公司(Moonshot AI)开发的人工智能助手,专注于提供高质量的对话和信息处理服务。 月之暗面公司创立于2023年3月,创始团队核心成员参与了Google Gemini、Google Bard、盘古NLP、…

文献学习-22-Surgical-VQLA:具有门控视觉语言嵌入的转换器,用于机器人手术中的视觉问题本地化回答

Authors: Long Bai1† , Mobarakol Islam2† , Lalithkumar Seenivasan3 and Hongliang Ren1,3,4∗ , Senior Member, IEEE Source: 2023 IEEE International Conference on Robotics and Automation (ICRA 2023) May 29 - June 2, 2023. London, UK Abstract: 尽管有计算机辅…

Jira 软件缺陷管理 (软件测试)

内容来源:总结黑马课程 1.软件缺陷信息 2.创建缺陷问题 2.1 缺陷模板 2.2 创建缺陷问题模板

CTF题型 Python中pickle反序列化进阶利用例题opache绕过

CTF题型 pickle反序列化进阶&例题&opache绕过 文章目录 CTF题型 pickle反序列化进阶&例题&opache绕过一.基础的pickle反序列化例题1.[HFCTF 2021 Final]easyflask2.[0xgame 2023 Notebook]3.[[HZNUCTF 2023 preliminary\]pickle](https://www.nssctf.cn/proble…

蓝桥杯java---螺旋矩阵

解题思路&#xff1a; int [][] arr new int[n][m];int i 0, j -1, temp 1;while (n * m > 0){for (int p 0; p < m; p)//从左自右arr[i][jj1] temp;n--;if (n * m 0) break;for (int p 0; p < n; p)//从上自下arr[ii1][j] temp;m--;if (n * m 0) break;fo…