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.rhkb.cn/news/353950.html

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

相关文章

通过Vue3+高德地图的JS API实现市区地图渲染

效果图1: 核心代码1: <script setup>import { onMounted, onUnmounted } from vue;import AMapLoader from @amap/amap-jsapi-loader;import { message } from ant-design-vue;import school from @/assets/icons/school.svg;import enterprise from @/assets/icons/e…

laravel版本≥ 8.1

laravel10 php ≥ 8.1 且 ≤ 8.3&#xff1f; 8.1 < php < 8.3PHP版本要求在 8.1 到 8.3 之间&#xff0c;包括这两个版本。具体来说&#xff1a;"≥ 8.1" 表示 PHP 的版本至少是 8.1&#xff0c;也就是说 8.1 及以上的版本都可以。 "≤ 8.3" 表示 P…

3dmax怎么渲染又快又清晰?

在3ds Max中&#xff0c;追求快速且清晰的渲染效果是每个设计师的目标。云渲染技术的出现&#xff0c;为这一目标提供了强大的支持。通过云渲染&#xff0c;设计师能够利用远程服务器的强大计算能力&#xff0c;实现快速渲染&#xff0c;同时保持图像的高清晰度。 一、3dmax怎么…

C++ 75 之 异常的传递

#include <iostream> #include <string> using namespace std;// 1.自己准备好一个类&#xff0c;写自己要打印的内容 class MyException{ public:void printE(){cout << "我自己写的异常" << endl;} };class Students02{ public:Students02…

若依 ruoyi 显示隐藏搜索框 显示隐藏列

一、 显示隐藏搜索框 页面搜索关键字 showSearch&#xff0c;设置是否显示 隐藏&#xff1a; 显示&#xff1a; 二、自定义设置 显示隐藏列 1. 页面搜索关键字 right-toolbar&#xff0c;新增&#xff1a; :columns"columns" 2. js下 data(){return{}}中新增&am…

js语法---理解反射Reflect对象和代理Proxy对象

Reflect 基本要点 反射&#xff1a;reflect是一个内置的全局对象&#xff0c;它的作用就是提供了一些对象实例的拦截方法&#xff0c;它的用法和Math对象相似&#xff0c;都只有静态方法和属性&#xff0c;同时reflect也没有构造器&#xff0c;无法通过new运算符构建实例对象&…

WinRAR应用文件图标是白色怎么解决

1.打开程序-选项-设置 2.找到集成-选择全部切换&#xff0c;保存即可。

Mobvista汇量科技解析奥运机会点及营销理念,看广告投放如何抢占先机

四年一度的奥运盛会&#xff0c;作为少有能跨越文化、宗教、种族、行为等各方面差异的体育事件&#xff0c;更能广泛吸引全球观众的目光&#xff0c;成为品牌方和广告主天然的流量磁铁。应用增长平台Mobvista汇量科技为助力各行业开发者、各品牌商家抢占奥运流量&#xff0c;分…

【CT】LeetCode手撕—141. 环形链表

目录 题目1- 思路2- 实现⭐141. 环形链表——题解思路 3- ACM实现 题目 原题连接&#xff1a;141. 环形链表 1- 思路 模式识别 模式1&#xff1a;判断链表的环 ——> 快慢指针 思路 快指针 ——> 走两步慢指针 ——> 走一步判断环&#xff1a;若快慢相遇则有环&a…

北京银行品牌价值提升160亿元首破千亿 位居《中国500最具价值品牌》榜第85位!

6月19日&#xff0c;由世界品牌实验室(World Brand Lab)主办的第二十一届“世界品牌大会”在北京举行&#xff0c;活动现场发布了2024年《中国500最具价值品牌》榜单。在这份基于财务数据、品牌强度和消费者行为分析的年度报告中&#xff0c;北京银行最新品牌价值达1036.62亿元…

将Jar用三种方式生成Windows的安装程序

无论是WEB(spring boot)的JAR,还是JavaFX以及swing的Jar,要生成windows方式。 打包成Windows可执行文件&#xff08;.exe&#xff09;&#xff0c;你可以使用以下三种方法&#xff1a; ### 方法1&#xff1a;使用Inno Setup 1. **构建JavaFX应用程序**&#xff1a; 使用M…

LaTeX 学习 第2节 数学结构

----用教授的方式学习 目录 2.1 上标与下标 2.2 上下画线与花括号 2.3 分式 2.4 根式 2.5 矩阵 ​​​​​​​LaTex安装包&#xff1a;https://download.csdn.net/download/weixin_38135241/89416392 LaTex- windows安装包&#xff1a;https://download.csdn.net/down…

web爬虫笔记:js逆向案例九(某多多 anti_content参数)补环境流程

web爬虫笔记:js逆向案例九(某多多 anti_content参数)补环境流程 一、目标网站:aHR0cHM6Ly9tb2JpbGUueWFuZ2tlZHVvLmNvbS8= 二、接口分析 1、快速定位加密位置(通过搜索/cells/hub/v3快速定位到加密js文件) 2、通过分析可知&#

springBoot多数据源使用、配置

又参加了一个新的项目&#xff0c;虽然是去年做的项目&#xff0c;拿来复用改造&#xff0c;但是也学到了很多。这个项目会用到其他项目的数据&#xff0c;如果调用他们的接口取数据&#xff0c;我还是觉得太麻烦了。打算直接配置多数据源。 然后去另一个数据库系统中取出数据…

王思聪隐形女儿曝光

王思聪"隐形"女儿曝光&#xff01;黄一鸣独自面对怀孕风波&#xff0c;坚持生下爱情结晶近日&#xff0c;娱乐圈掀起了一场惊天波澜&#xff01;前王思聪绯闻女友黄一鸣在接受专访时&#xff0c;大胆揭露了她与王思聪之间的爱恨纠葛&#xff0c;并首度公开承认&#…

kubernetes 核心概念

1 kubernetes核心概念 1.1 Pod Pod是可以在Kubernetes中创建和管理的、最小的可部署的计算单元。 Pod就像豌豆荚一样&#xff0c;其中包含着一组&#xff08;一个或多个&#xff09;容器&#xff1b;这些容器共享存储、网络、以及怎样运行这些容器的声明。 Pod就像一台物理…

Suno AI如何解决制作多语言混合的歌曲~

导读 你想不想制作一首有中文和粤语混合的歌曲&#xff1f; 你想不想制作一首有中文和日语混合的歌曲&#xff1f; 你想不想制作一首有中文和英语混合的歌曲&#xff1f; 如果你想不知道怎么操作&#xff0c;可以阅读下本文。 说明 本文让AI唱一首中文和日语混合的歌曲&am…

Linux笔记--vi编辑器

vi编辑器 基本操作 对于vi编辑器有这几种模式 移动 当编辑一个过大的文件时通过方向键移动光标过慢所以可以使用快捷键进行移动 编辑 dw指令只能在单词第一个字母处使用 D指令删除的是当前行 查找替换 pattern指代想要搜索的内容

Chrome插件开发入门:手把手教你创建第一个扩展

问题背景 最近&#xff0c;客户发布了一个新的任务 —— 开发一个Chrome插件。之前没有这方面的开发经验&#xff0c;准备想学习一下这块的内容&#xff0c;我发现网上的大多数视频都是几年前的&#xff0c;开发版本都是基于MV2&#xff0c;当前谷歌已经开始使用MV3&#xff0…

Elasticsearch如何聚合查询多个统计值,如何嵌套聚合?并相互引用,统计索引中某一个字段的空值率?语法是怎么样的

文章目录 Elasticsearch聚合查询说明空值率查询DSL Elasticsearch聚合基础知识扩展Elasticsearch聚合概念Script 用法Elasticsearch聚合查询语法指标聚合&#xff08;Metric Aggregations&#xff09;桶聚合&#xff08;Bucket Aggregations&#xff09;矩阵聚合&#xff08;Ma…