python学习笔记-08

面向对象基础(OOP)-上

1. 面向对象概述

面向过程:根据业务逻辑从上到下写代码
函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可
面向对象(object oriented programming):将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程。

在进行面向过程编程时,将问题拆解成几个步骤,并将这些步骤一步一步实现。
在进行面向对象时,关注的是设计的过程,类似于甲方,给个方案让别人实现。
面向过程不适合大项目,关注点是怎么做。
面向对象适合大项目,关注点是谁来做。

面向对象编程是一种解决软件复用的设计合编程方法。这种方法把软件系统中相似的操作逻辑合操作应用数据、状态,以类的形式描述出来,以对象实例的形式在软件系统中复用,以达到提高软件开发效率的作用。

2.类和对象

类就是一个模板,模板里可以包含多个函数,函数里实现一些功能,
对象是根据模板创建的实例,通过实例对象可以执行类中的函数。

类相当于制造汽车的图纸,用这个图纸制造的汽车相当于对象。

类的组成部分:
1.类名
2.类的属性:一组数据
3.类的方法:允许对象进行操作的方法
如:
类名:人
属性:身高、体重...
方法:吃、跑...

类是具有一组相同或相似属性和方法的一系列对象的集合,是对象的抽象化。对象是类的实例。

3.定义类和对象

格式:

创建类:
class 类名:属性方法
实例化对象:
对象名=类名()
#定义类
class Person:'''属性和对象几个都行'''name='属性'age=20def eat(self):print('方法')passdef run(self):print('方法2')passpass
#创建对象,实例化对象
person=Person()
person.eat()
person.run()
print(person.name,person.age)

在这里插入图片描述

4.实例方法和属性

在类的内部,使用def关键字可以定义一个实例方法,与一般函数定义不同,类方法必须包含参数self(名字标识可以是其他的,但是位置必须存在)且为第一个参数。
实例方法:每个实例都可以调用。
属性:类里面方法外面定义的变量称为类属性,定义在方法内部使用self引用的属性称为实例属性。

#定义类
class Person:'''属性和对象几个都行'''age=20def eat(self):print('方法')passdef run(self):print('方法2')passdef __init__(self):self.name='实例属性'pass
#创建对象,实例化对象
person=Person()
person.eat()
person.run()
print(person.name,person.age)

在这里插入图片描述

5.init方法

5.1 引入

class People:def eat(self):'''实例方法:return:'''print('喜欢吃东西')passpass
p1=People()
p1.name='同学1'   #也属于实例属性
p1.sex='女'
p1.age=22
p1.eat()
print(p1.name,p1.sex,p1.age)
p2=People()
p2.name='同学2'   #也属于实例属性
p2.sex='女'
p2.age=22
print(p2.name,p2.sex,p2.age)
#如果有n个对象被实例化,就需要重复以上很多次
#故而引入init函数

init函数主要做一些实例属性的声明和初始化的工作,这个函数由系统创建对象时自动执行。
5.2 使用
init方法可以👇

class People:#凡是用双下划线圈起来的方法都是python的魔术方法def __init__(self):'''声明实例属性'''self.name='梨花'self.sex='女'self.age=11passdef eat(self):'''实例方法:return:'''print('喜欢吃东西')passpass
p=People()
print(p.name,p.age,p.sex)
#此时如果想重新赋值直接“p.name='新名字'”操作即可

也可以传参👇

class People:#凡是用双下划线圈起来的方法都是python的内置方法def __init__(self,name,sex,age):'''声明实例属性'''self.name=nameself.sex=sexself.age=agepassdef eat(self,food):'''实例方法:return:'''print(self.name+'喜欢吃'+food)passpass
p=People('丽华','南',19)
p.eat('小龙虾')
print(p.name,p.age,p.sex)
#在实例化对象的时候将值传进去,灵活性很高

在这里插入图片描述
5.3 self
self和对象指向同一个内存地址,可以认为self就是对象的引用。

class Person:def eat(self):print('self的内存地址为%s',id(self))passpass
p=Person()
print('p的内存地址为%s',id(p))
p.eat()

在这里插入图片描述
其实所谓的self就是对象自己,相当于Java中的this。某个对象调用其方法时,python解释器会把这个对象作为第一个参数传递给self,所以我们只用传递后面的参数即可。

class Person:def __init__(self,pro):self.pro=propassdef eat(self,name,food):print('%s喜欢吃%s修的专业是%s'%(name,food,self.pro))passpass
p=Person('计算机')  #初始化时给init中除了self的参数
p.eat('丽丽','龙虾')

在这里插入图片描述

6.魔术方法

在这里插入图片描述
6.1 __str__方法
在这里插入图片描述
在这里插入图片描述

class Person:def __init__(self,pro,name,food):self.pro=proself.name=nameself.food=foodpassdef __str__(self):''':return: 自定义输出的数据内容'''return '%s喜欢吃%s修的专业是%s'%(self.name,self.food,self.pro)pass
p=Person('计算机','丽丽','龙虾')
print(p)

在这里插入图片描述
6.2 __new__方法

class Person:def __init__(self,pro,name,food):self.pro=proself.name=nameself.food=foodprint('init函数的执行')passdef __str__(self):''':return: 自定义输出的数据内容'''return '%s喜欢吃%s修的专业是%s'%(self.name,self.food,self.pro)def __new__(cls, *args, **kwargs):'''cls:是class的缩写创建对象实例的方法,每调用一次会生成一个新的实例对象不声明系统也会默认调用可以控制创建对象的一些属性限定,经常用来做单例模式的时候使用:param args::param kwargs:'''print('new函数的执行')return object.__new__(cls)   #不加这句话不创建对象passp=Person('计算机','丽丽','龙虾')
print(p)
#先执行new函数,如果new函数有创建对象的操作就执行init函数
#new和init的区别:
#new函数是类的实例化方法,必须有return实例,否则对象创建不成功
#init类似于Java中的构造函数,用来做数据属性初始化工作,接受类的实例self并对其进行构造
#new至少有一个参数cls表示要实例化的类,此参数在实例化时由python解释器自动提供

在这里插入图片描述

7.实践–决战紫禁之巅

在这里插入图片描述

import time  #导入时间的包
import random
#定义角色类
class Person():def __init__(self,name,blood):self.name=nameself.blood=bloodpassdef tong(self,enemy):'''enemy表示敌人:param enemy::return:'''enemy.blood-=10info='[%s]捅了[%s]一刀'%(self.name,enemy.name)print(info)passdef kanren(self,enemy):enemy.blood-=15info='[%s]砍了[%s]一刀'%(self.name,enemy.name)print(info)passdef chiyao(self):self.blood+=10info='[%s]吃了一个药丸增加10滴血'%(self.name)print(info)passdef __str__(self):return '%s的剩余血量是%d'%(self.name,self.blood)pass
xmcx=Person('西门吹雪',100)
ygc=Person('叶孤城',100)
while ygc.blood>0 and xmcx.blood>0:i=random.randint(1,6)if i==1:ygc.tong(xmcx)print(xmcx)print(ygc)passelif i==2:xmcx.tong(ygc)print(xmcx)print(ygc)passelif i==3:ygc.chiyao()print(xmcx)print(ygc)passelif i==4:xmcx.chiyao()print(xmcx)print(ygc)passelif i==5:ygc.kanren(xmcx)print(xmcx)print(ygc)passelif i==6:xmcx.kanren(ygc)print(xmcx)print(ygc)passprint('--------------------')time.sleep(1)   #休眠1秒pass
if ygc.blood==0:print('叶孤城输了')pass
if xmcx.blood==0:print('西门吹雪输了')pass

在这里插入图片描述

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

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

相关文章

微信小程序毕业设计-电影院订票选座系统项目开发实战(附源码+论文)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计…

【JS重点14】内置构造函数

目录 一:Object构造函数 1 创建对象说明 2 关于Object的三个常用静态方法 Object.keys() Object.values() Object.assign() 二:Array构造函数 1 数组对象的常见实例方法 2 详解reduce实例方法 语法规则: 运行细节: 案例: 3 map()…

【C++高阶】高效搜索的秘密:深入解析搜索二叉树

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C “ 登神长阶 ” 🤡往期回顾🤡:C多态 🌹🌹期待您的关注 🌹🌹 ❀二叉搜索树 📒1. 二叉搜索树&…

一键解压,无限可能——BetterZip,您的Mac必备神器!

BetterZip for Mac 是一款高效、智能且安全的解压缩软件,专为Mac用户设计。它提供了直观易用的界面,使用户能够轻松应对各种压缩和解压缩需求。 这款软件不仅支持多种压缩格式,如ZIP、RAR、7Z等,还具备快速解压和压缩文件的能力。…

qt 5.6 qmake手册

qt 5.6 qmake手册 (笔者翻译的qmake手册,多数是机翻,欢迎评论区纠错修正) Qmake工具有助于简化跨不同平台开发项目的构建过程。它自动生成Makefile,因此创建每个Makefile只需要几行信息。您可以将qmake用于任何软件项目…

32.双击列表启动目标游戏

上一个内容&#xff1a;31.加载配置文件中的游戏到辅助列表 以 31.加载配置文件中的游戏到辅助列表 它的代码为基础进行修改 效果图&#xff1a; 添加列表双击事件 实现代码&#xff1a; LPNMITEMACTIVATE pNMItemActivate reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR…

考研数学强化,880+660正确打开方式

1800题基础做完了&#xff1f;做的怎么样&#xff01; 之所以问你做的怎么样&#xff0c;是因为1800题做的好坏&#xff0c;直接决定了你要不要开始做880题和660题。 有的同学1800题做的很好&#xff0c;做完1800题之后开始做880660没毛病 但是有的同学就是纯纯的为了做题而…

python使用哪种数据库

MySQL 是一个关系型数据库管理系统&#xff0c;由瑞典MySQL AB 公司开发&#xff0c;目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一&#xff0c;在 WEB 应用方面&#xff0c;MySQL是最好的 RDBMS (Relational Database Management System&#xff0c;关…

阿里云SSL免费证书部署(nginx)

1.先在阿里云领取免费证书 创建证书 下载证书 得到nginx证书和密钥的压缩包 2.配置nginx 将两个文件放进nginx的opt目录下 先检查有没有ngx_http_ssl_module模块 ngixn -V 如果有进入下一步&#xff0c;没有继续 1.找到你nginx的文件 2.进入添加模块 ./configure --with-h…

git的Cherry pick

Cherry pick Git Cherry Pick详解 https://blog.csdn.net/jam_yin/article/details/131594716 目标: 将开发分支A中提交的部分内容合并到B分支(可能是测试分支) 步骤: vscode安装 点击下图标进入graph

最新版本IntelliJ IDEA安装与“坤活”使用

最新版本IntelliJ IDEA安装与“科学”使用 IntelliJ IDEA安装与坤活下载安装坤活idea1.将下面两个压缩文件解压到安装位置&#xff0c;注意路径不要包含中文空格等特殊符号2.双击 install-all-users.vbs &#xff0c;然后点击确定&#xff0c;等到出现 Done的弹窗3. 打开idea复…

远程桌面另一台服务器连接不上,局域网IP如何访问另一台服务器

在IT运维工作中&#xff0c;远程桌面连接是日常工作中不可或缺的一部分。然而&#xff0c;当尝试远程桌面连接至另一台服务器时&#xff0c;如果连接不上&#xff0c;可能会引发一系列问题&#xff0c;影响到工作效率和信息安全。特别是在局域网环境中&#xff0c;确保能够正确…

AI口语练习APP的技术难点

AI口语练习APP旨在帮助用户练习口语&#xff0c;因此其核心功能是语音识别和语音评测。以下是一些AI口语练习APP的主要技术难点。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1. 语音识别 语音识别是将语音信号转换为文本的过程。…

【golang学习之旅】使用VScode安装配置Go开发环境

1. 下载并安装Go1.1 下载地址1.2 选择版本并下载1.3 安装目录1.4 验证是否安装成功 2. 配置环境变量2.1 配置步骤2.2 GO部分环境变量说明 3. 下载或更新 Vscode3.1 下载地址3.2 安装步骤 4. 为Go开发配置VScode 1. 下载并安装Go 1.1 下载地址 https://studygolang.com/dl 1.…

ChinaTravel成流量密码,景区如何打造视频监控管理平台提升旅游体验

随着中国经济的飞速发展和人民生活水平的持续提高&#xff0c;旅游已经成为越来越多人休闲放松的首选方式。近期&#xff0c;随着互联网的普及和社交媒体的兴起&#xff0c;以及免签政策带火入境游&#xff0c;“ChinaTravel”已成为社交网络上的一大流量密码&#xff0c;吸引了…

送检了200多款主食冻干,花费百万后,我测评了VE、希喂、朗诺!

主食冻干真是养猫的好帮手&#xff0c;方便、易喂&#xff0c;还能为猫咪提供全面营养&#xff01;它模拟了猫咪的自然捕猎饮食&#xff0c;采用低温脱水和灭菌技术制成。这样的主食冻干不仅让铲屎官们的喂养变得轻松&#xff0c;还满足了猫咪的味蕾和营养需求。更重要的是&…

跟《经济学人》学英文:2024年6月15日这期 Chinese electric vehicles (EVs)

The EU hits China’s carmakers with hefty new tariffs Duties will only hold them back for a while 欧盟对中国汽车制造商征收高额新关税 hit: 对xxx施加 在句子"The EU hits China’s carmakers with hefty new tariffs"中&#xff0c;“hits”的意思是“对…

Fastjson 结合 jdk 原生反序列化的利用手法 ( Aliyun CTF )

2023 Aliyun CTF ezbean是一道CTF java反序列化题目。 题目的目的是让选手通过一个java原生反序列化入口&#xff0c;最终达成RCE。本文对题目的几种解法做了具体的分析&#xff0c;主要分为预期解法和非预期解法两种思路。通过对Fastjson在反序列化的行为分析&#xff0c;从两…

华为---OSPF单区域配置(一)

09、OSPF 9.1 OSPF单区域配置 9.1.1 原理概述 为了弥补距离矢量路由协议的不足&#xff0c;IETF组织开发了一种基于链路状态的内部网关协议——OSPF&#xff08;Open Shortest Path First&#xff0c;开放式最短路径优先&#xff09;。 OSPF作为基于链路状态的协议&#xf…

【网络安全学习】漏洞扫描:- 02- nmap漏洞扫描

1.nmap的介绍 Nmap是一款功能强大的网络探测和安全扫描工具&#xff0c;可以对目标进行端口扫描、服务探测、操作系统指纹识别等操作。 Nmap自带了许多内置的NSE脚本&#xff0c;它们可以根据不同的目标和场景来执行不同的功能。这些脚本存放在Nmap安装目录**/usr/share/nmap…