python学习笔记-08

2024-06-19 20:36
文章标签 python 08 笔记 学习

本文主要是介绍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

在这里插入图片描述

这篇关于python学习笔记-08的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1076077

相关文章

51单片机学习记录———定时器

文章目录 前言一、定时器介绍二、STC89C52定时器资源三、定时器框图四、定时器模式五、定时器相关寄存器六、定时器练习 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、定时器介绍 定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。 定时器作用: 1.用于计数系统,可

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

[word] word设置上标快捷键 #学习方法#其他#媒体

word设置上标快捷键 办公中,少不了使用word,这个是大家必备的软件,今天给大家分享word设置上标快捷键,希望在办公中能帮到您! 1、添加上标 在录入一些公式,或者是化学产品时,需要添加上标内容,按下快捷键Ctrl+shift++就能将需要的内容设置为上标符号。 word设置上标快捷键的方法就是以上内容了,需要的小伙伴都可以试一试呢!

Tolua使用笔记(上)

目录   1.准备工作 2.运行例子 01.HelloWorld:在C#中,创建和销毁Lua虚拟机 和 简单调用。 02.ScriptsFromFile:在C#中,对一个lua文件的执行调用 03.CallLuaFunction:在C#中,对lua函数的操作 04.AccessingLuaVariables:在C#中,对lua变量的操作 05.LuaCoroutine:在Lua中,

AssetBundle学习笔记

AssetBundle是unity自定义的资源格式,通过调用引擎的资源打包接口对资源进行打包成.assetbundle格式的资源包。本文介绍了AssetBundle的生成,使用,加载,卸载以及Unity资源更新的一个基本步骤。 目录 1.定义: 2.AssetBundle的生成: 1)设置AssetBundle包的属性——通过编辑器界面 补充:分组策略 2)调用引擎接口API

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语音听题、本地搜题、顺序阅读、模拟考试、组卷考试、赶快下载吧! 2.彩虹搜题 这是个老公众号了 支持手写输入,截图搜题,详细步骤,解题必备

《offer来了》第二章学习笔记

1.集合 Java四种集合:List、Queue、Set和Map 1.1.List:可重复 有序的Collection ArrayList: 基于数组实现,增删慢,查询快,线程不安全 Vector: 基于数组实现,增删慢,查询快,线程安全 LinkedList: 基于双向链实现,增删快,查询慢,线程不安全 1.2.Queue:队列 ArrayBlockingQueue:

Python 字符串占位

在Python中,可以使用字符串的格式化方法来实现字符串的占位。常见的方法有百分号操作符 % 以及 str.format() 方法 百分号操作符 % name = "张三"age = 20message = "我叫%s,今年%d岁。" % (name, age)print(message) # 我叫张三,今年20岁。 str.format() 方法 name = "张三"age

硬件基础知识——自学习梳理

计算机存储分为闪存和永久性存储。 硬盘(永久存储)主要分为机械磁盘和固态硬盘。 机械磁盘主要靠磁颗粒的正负极方向来存储0或1,且机械磁盘没有使用寿命。 固态硬盘就有使用寿命了,大概支持30w次的读写操作。 闪存使用的是电容进行存储,断电数据就没了。 器件之间传输bit数据在总线上是一个一个传输的,因为通过电压传输(电流不稳定),但是电压属于电势能,所以可以叠加互相干扰,这也就是硬盘,U盘