Python—面向对象小解(2)

一、面向对象开发的基本使用

根据需求定义类

  • 关键字class

  • 属性

    • 变量

  • 方法

    • 函数

    • 默认函数中必须有个self参数

    • self(自己)代表当前对象

如何将一项物品放入一个空间内?

# 类的定义创建
class itcast:# 指定属性name = '大象'container = '冰箱'# 指定数据的处理方法def open_container(self):# self代表当前兑现本身,可以使用self调用类中的属性和方法print(f'打开{self.container}')def add_func(self):print(f'将{self.name}放入{self.container}')def close_container(self):print(f'关闭{self.container}')# 使用类创建对象
obj = itcast()
# 调用对象方法
obj.open_container()
obj.add_func()
obj.close_container()

二、类的属性

类属性说明:

本质就是保存数据,属性有两种:类属性、对象属性

类属性:在方法的外部,类的下方定义的叫做类属性

class A:data = 10  # 类属性def func(self):

对象属性:在方法内使用self定义的数据

class A:def func(self):self.data = 20 # 对象属性

两种属性区别:

1-类属性可以使用类名获取也可以使用对象获取

2-对象属性只能使用对象获取

# 属性说明
class itcast:name = '张三'  # 类型属性def func(self):self.age = 20 # 对象属性def func2(self):# self就是一个对象print(self)print(self.name)print(self.age)# 属性值的获取调用
# 类属性获取
# 类名获取类属性值
print(itcast.name)
# 使用类创建对象
obj = itcast()
# 对象获取类属性值
print(obj.name)# 对象属性
# 先使用方法,执行对象属性的创建
obj.func()
# print(itcast.age) # 类名无法获取对象属性值
print(obj.age) # 使用对象可以获取对象属性# 调用func2方法
print(obj)
obj.func2()

self的说明:

self代表当前对象本身,是一个对象

# self的演示
class A:def func(self):print(self)# 使用类创建对象
# 创建对象a1
a1  = A()
print(a1)
# 使用对象调用方法
a1.func() # self输出信息和a1输出信息一样,self现在代表的是a1# 创建对象a2
print('---------------------------------------------------')
a2 = A()
print(a2)
a2.func() # 方法是哪个对象调用,self代表的就是当前对象

三、类的方法

3.1-魔法方法

魔法方法

  • 类中自带的方法

  • __init__()

    • 在创建类对象时会调用的方法

  • __str__()

    • 在对对象进行print输出时调用

  • __del__()

    • 在删除对象时会被调用

3.2-自定义方法

自己编写分方法

# init魔法方法的使用
class A:# 魔法方法def __init__(self):print('创建对象调用')# 自定义方法def func(self):print('自定义方法,需要创建对象后,使用对象调用才会执行')# 创建对象会调用init方法
a1 = A()# 使用对象调用func方法
a1.func()

3.3-魔法方法使用

class A:# 魔法方法# init方法常用def __init__(self):# 初始化方法  在创建兑现时调用print('init')def __str__(self):# 输出方法  在对对象进行print输出时调用print('str')return '调用了str方法'def __del__(self):# 删除对象时调用print('del')
# 创建对象 调用初始化方法
a = A()# 在print输出对象会调用str
print(a) # 将str的返回值输出# 可以手动删除对象
del a# 程序结束后需要 会自动删除对象
for i in range(100000):print(i)

3.4-方法的传参

方法本质其实就是函数,可以将数据通过参数传递到方法内

  • 形参

    • 缺省参数

    • 不定长参数

  • 实参

    • 位置参数 按照形参的位置和个数传递数据

    • 关键字参数 形参名=值​​​

3.4.1-init方法传参
# init魔法方法的传参
class A:def __init__(self, name, age=0):# 接收参数数据,使用self创建对象属性保存数据self.name = nameself.age = age# 自定义方法def func(self):# 方法内使用定义的属性值print(f'姓名:{self.name},年龄{self.age}')# 传递参数数据  init方法的参数在创建对象时传递
a = A('张三',age=20)
# 直接获取属性值
print(a.name) # 使用对象获取对象属性值
# 调用自定义方法输出
a.func()
3.4.2-自定义方法传参
class A:# 自定义方法接收参数def func(self,name,age=10):# 使用属性保存self.name = nameself.age = age# 自定义函数2def func2(self):# 通过self获取属性值print(f'姓名:{self.name},年龄:{self.age}')# 初始化创建对象
a = A()# 调用自定义方法传递参数数据
a.func('张三')# 获取属性值
print(a.name)
print(a.age)# 谁调用方法,方法中self就是谁
a.func2()# 第二个对象
a2 = A()
# 使用a2对象调用方法
a2.func('李四',50)
print(a2.name)print(a.name)

四、封装

        封装是面向对象编程的基本概念之一,指的是将数据(属性)和操作(方法)封装在类中,并限制对这些数据的直接访问。通过封装,可以隐藏对象的内部实现细节,提供一个受控的接口来访问和修改数据。这样做的好处是提高了代码的安全性和可维护性。

class 类名:属性方法# 类继承
class 类名():属性方法# 继承Python的顶级类 ,默认不写自动继承
class 类名(object):

建议定义类名的时,使用大驼峰命名,首字母大写:

# 不同定义类的方式
# 定义一个学生类
class Student:name = '张三'# 定义教师类  继承使用
class Teacher():name = '李四'# 定义学校类
class School(object):name = '长安大学'# 使用类创建对象
stu = Student()
print(stu.name)teacher = Teacher()
print(teacher.name)school  = School()
print(school.name)

五、继承

        继承是面向对象编程的另一个基本概念,它允许一个类(子类)继承另一个类(父类)的属性和方法。通过继承,子类可以重用父类的代码,同时还可以添加新的属性和方法,或者修改父类的方法。这有助于减少代码的重复,提高代码的可维护性和可扩展性。

5.1单继承

一次继承一个类

(1)Father类有一个性别属性,默认为男,同时,Father跑步速度快;

(2)如果Son类也想要拥有这些属性和方法,该怎么做呢?

(3)执行程序,观察程序效果。

# 单继承
class Father:gender = '男'def run(self):print('跑步速度快')# 定义son 使用Father的属性和方法,就通过继承
# 一但继承后  Father叫做父类  Son叫子类 派生类
class Son(Father):def play(self):print('玩游戏')son = Son()# 在子类对象中调用父类的属性和方法
print(son.gender)
son.run()
son.play()

(1)从前,有个摊煎饼的老师傅[Master],在煎饼果子界摸爬滚打多年,研发了一套精湛的摊煎饼技术;

(2)渐渐地,老师傅老了,就想着把这套技术传授给他唯一的最得意的徒弟[TuDi];

(3)试着通过初始化、无参、定义方法与单继承来模拟程序。

class Master:def __init__(self):self.name = '师傅'def jianbin(self):print('摊煎饼')class TuDi(Master):# 子类中没有要新增的方法或属性pass# 初始化对象
t = TuDi()
t.jianbin()

5.2多继承

继承多个类

(1)徒弟是个爱学习的好孩子,想学习更多的摊煎饼技术;

(2)于是,在百度搜索煎饼学校[School],学习如何摊煎饼;

(3)使用多继承形式模拟程序。

class Master:def __init__(self):self.name = '师傅'def jianbin(self):print('摊煎饼')class School:def __init__(self):self.name ='学校'def jianbin(self):print('摊煎饼2')class TuDi(Master,School):# 子类中没有要新增的方法或属性pass# 初始化对象
t = TuDi()
t.jianbin()

(1)可以发现老师傅[Master]、学校[School]都有摊煎饼方法;

(2)在徒弟对象中调用摊煎饼方法,会执行哪个父类的方法呢?

调用第一个父类的方法,print(TuDi.mro) # 查看类的继承执行顺序

(3)思考:当给父类学校[School]新增编程方法后,子类能调用方法吗?

可以调用

class Master:def __init__(self):self.name = '师傅'def jianbin(self):print('摊煎饼')class School:def __init__(self):self.name ='学校'def jianbin(self):print('摊煎饼2')def baozi(self):print('蒸包子')class TuDi(Master,School):# 子类中没有要新增的方法或属性pass# 初始化对象
t = TuDi()
t.jianbin()print(TuDi.__mro__) # 查看类的继承执行顺序t.baozi()

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

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

相关文章

网络工程师:网络可靠性技术

一、可靠性 平均故障间隔时间MTBF(Mean Time Between Failure)和平均修复时间MTTR(Mean Time to Repair)这两个指标来评价系统的可靠性。 1、平均故障间隔时间MTBF MTBF是指一个系统无故障运行平均时间,通常以小时为单位。MTBF越大可靠性越高。 2、平均修复时间MTTR…

内网安全-隧道搭建穿透上线内网穿透-nps自定义上线内网渗透-Linux上线-cs上线Linux主机

目录 内网安全-隧道搭建&穿透上线内网穿透-nps-自定义-上线NPS工具介绍搭建过程 nps原理介绍MSF上线CS上线 内网渗透-Linux上线-cs上线Linux主机1.下载插件2.导入插件模块3.配置监听器4.服务端配置5.配置C2监听器并生成木马6.执行木马 内网安全-隧道搭建&穿透上线 内网…

2024年新算法-秘书鸟优化算法(SBOA)优化BP神经网络回归预测

2024年新算法-秘书鸟优化算法(SBOA)优化BP神经网络回归预测 亮点: 输出多个评价指标:R2,RMSE,MSE,MAPE和MAE 满足需求,分开运行和对比的都有对应的主函数:main_BP, main_SBOA, main_BPvsBP_SB…

vue3 excel 文件导出

//文件导出 在index.ts 中 export function downloadHandle(url: string,params?:object, filename?: string, method: string GET){ try { downloadLoadingInstance ElLoading.service({ text: "正在生成下载数据,请稍候", background: "rgba…

【计算机视觉 Mamba】MambaOut: Do We Really Need Mamba for Vision?

MambaOut: Do We Really Need Mamba for Vision? 在视觉任务上我们需要Mamba吗? 论文地址 代码地址 知乎解读:王牌飞行员申请出战! 知乎解读:Mamba 模型解读 (一):MambaOut:在视觉任务中,我们真的需要 …

Tessy学习系列(一):软件测试的概念介绍与常见的测试策略

相关内容参考自《软件测试的艺术》 一、软件测试的概念 所谓软件测试,就是一个过程或一系列过程.用来确认计算机代码完成了其应该完成的功能不执行其不该有的操作。软件应当是可预测且稳定的,不会给用户带来意外惊奇。 软件测试的作用主要体…

Langchain-Chatchat之pdf转markdown格式

文章目录 背景开发环境loader文本解析步骤markdown格式的文本为什么选择markdown格式测试markdown格式提取表格原pdf表格markdown格式的表格 测试markdown格式的知识库运行项目修改文件加载器loader 其他问题运行项目报错查看系统当前的max_user_watches修改sysctl.conf配置 图…

AWS迁移与传输之AMS/MGN

AWS Application Migration Service(AWS Application Migration Service简称为AWS MGN,MGN是migration的缩写。)是一项全面的迁移服务,旨在帮助企业将其本地服务器和虚拟机迁移到云端,包括AWS和VMware Cloud on AWS。 …

OrangePi AIpro初体验:开启嵌入式开发之旅

概述 随着物联网和智能设备时代的到来,单板电脑因其独特的优势成为创新项目和教育实践的重要工具。在众多单板电脑中,香橙派以其出色的性能和亲民的价格,十分吸引博主这初涉嵌入式开发的新手。博主有幸被CSDN邀请对OrangePi AIpro进行测评。…

Netty-选择器-监听

归档 GitHub: Netty-选择器-监听 介绍 参考 NioEventLoop 类结构:基础类介绍-NioEventLoop 主要逻辑为:死循环监听 selector总结: 创建的线程是 FastThreadLocalThread 实例 原理 io.netty.channel.nio.NioEventLoop /*** NIO 事件轮循 …

vivado设置Vscode为默认编辑器

D:\vscode\Microsoft VS Code\Code.exe -g [file name]:[line number]

鸿蒙ArkUI-X跨平台开发:【资源分类与访问】

资源分类与访问 应用开发过程中,经常需要用到颜色、字体、间距、图片等资源,在不同的设备或配置中,这些资源的值可能不同。 应用资源:借助资源文件能力,开发者在应用中自定义资源,自行管理这些资源在不同…

话术巧妙分隔沟通效果更佳看看这个小技巧

客服回复客户咨询,如果遇到比较复杂的问题,经常会有大段的文字回复,用聊天宝的分段符功能,在需要分段的地方点击右上角的“插入分隔符”,就可以在指定位置分段,实现多段发送的目的。 前言 客服回复客户咨询…

干冰清洗机的清洗原理及应用

干冰清洗机的清洗原理及应用可以详细阐述如下: 一、清洗原理 干冰清洗机的清洗原理主要基于干冰的低温冷冻作用。干冰在常温下会迅速升华,吸收大量的热量,使周围的温度迅速降低。当干冰颗粒通过特殊的干冰清洗机喷射到清洗物体表面时&#…

系统架构设计师【第1章】: 绪论 (核心总结)

文章目录 1.1 系统架构概述1.1.1 系统架构的定义及发展历程1.1.2 软件架构的常用分类及建模方法1.1.3 软件架构的应用场景1.1.4 软件架构的发展未来 1.2 系统架构设计师概述1.2.1 架构设计师的定义、职责和任务1.2.2 架构设计师应具备的专业素质1.2.3 架构设计师的知识…

Java入门基础学习笔记45——String使用的注意事项

String使用时的注意事项: 1)String对象的内容不可改变,被称为不可变字符串对象。 Strings are constant; their values cannot be changed after they are created. String buffers support mutable strings. Because String objects are im…

C++代码使用ClangCL编译注意事项

遇到cmake指定模板类工程使用msvc的clang编译器编译代码,代码变量出现与预期不符的问题; 如下: clangcl将实现放到头文件里则不会出现这样的情况; 最后按照pcl的模板类写法则解决这个问题;

前端常见的页面自适应布局方案

流式布局 使用百分比单位等单位来表示长度和宽度&#xff0c;这样在整体的长度和宽度变化的时候&#xff0c;里面的内容也会发生变化。 使用 % 直接使用百分比&#xff0c;在页面宽度变化的时候会对应放大缩小。 <!DOCTYPE html> <html lang"en"><he…

vue3 RouterLink路由query传参

vue route query传参 一、传参页面,需要传id、title、content三个参数 <ul> <li v-for"news in newsList" :key"news.id"> <!--/news/detail--> <RouterLink :to"{ path:/news/deta…

[SCTF2019]Who is he

unity 游戏&#xff0c;直接输入字符串 直接修改 if 判断&#xff0c;看能不能直接输出flag 修改了程序逻辑&#xff0c;但还是输出了 明明已经把这个 if 删了 不知道为什么还会输出这串字符 应该程序还有什么引入吧&#xff0c;看 wp 应该先查一下程序的动态链接库 DLL 是…