面向对象与面向过程
目录类与对象类Class定义类self 关键字“魔法方法”对象Object定义对象获取属性及调用方法面向对象Object-OrientedOO封装Encapsulation继承Inheritance多态Polymorphism抽象类与抽象方法面向对象的其它特征面向过程Procedural Programming面向对象与面向过程的区别类与对象类Class对一类具有相同属性和方法的对象的抽象描述属性(Attributes)描述对象的特征或状态也称为成员变量方法(Methods)描述对象的行为或功能也称为成员函数定义类class ClassName(object): attribute value # 定义类的属性变量 def __init__(self): self.attribute value # 定义实例的属性【self关键字只能在函数内】 def function(self): # 定义类的方法函数 passself 关键字代表 指向 类 的当前实例对象谁调用函数self就是谁为 实例方法 提供 访问该实例自身属性和方法 的 引用是类方法的第一个参数指向 调用该方法 的 实例对象“魔法方法”【在特殊情况下会被自动调用】def __init__(): 在定义 对象 时会被自动调用执行def __init__(self, color, number): self.color color self.number numberdef __str__(): 在输出打印 对象的属性 时会被自动调用执行def __str__(self): return self.attribute # 返回值的类型必须是字符串类型def __del__(): 在 对象的生命周期结束时被销毁 时会被自动调用执行def __del__(self): pass对象Object对象是类的实例是根据类创建的具体实体一个类可以创建多个对象定义对象variable ClassName()获取属性及调用方法在类内获取属性及调用方法self.attribute # self.属性 self.function() # self.函数名()在类外获取属性及调用方法variable.attribute # 变量名.属性 variable.function() # 变量名 . 函数名()面向对象Object-OrientedOO一种编程范式程序设计思想【一切皆对象】以对象为核心通过封装、继承、多态等机制组织和复用代码优点模块化、复用性、灵活性封装Encapsulation将数据属性和操作数据的方法行为绑定在一起 形成一个独立的对象对外隐藏内部实现细节仅暴露必要接口【封装不只对于类的封装也对于函数的封装】封装可以为属性和方法添加私有权限只能在类内访问【类外通过公共方法接口访问】class ClassName(object): def __init__(self, value): self.__attribute value # 定义私有属性 def __function(self): # 定义私有方法 return self.__attribute def function(self): # 定义公共方法对外提供接口 return self.__function() # 调用私有方法返回私有属性继承Inheritance多个类之间的所属关系子类派生类默认继承父类基类、超类的属性和方法单继承class ClassName(object): # 定义父类 attribute value def function(self): pass class Subclasses(ClassName): # 定义子类继承自父类 attribute value def function(self): pass多继承class ClassName(object): # 定义父类 attribute value def function(self): pass class SubclassesOne(ClassName): # 定义子类继承自父类 attribute value def function(self): pass class SubclassesTwo(ClassName, SubclassesOne): # 定义子类继承自两个父类 attribute value def function(self): pass子类调用父类方法class SubclassTwo(ClassName, SubclassesOne): ClassName.function() # 调用指定基类的函数 — 父类名.方法名(self) super().function() # 只能调用传入的第一个父类的函数子类调用父类的同名方法当一个类有多个父类时默认使用第一个父类的同名属性和方法具体调用顺序依据MRO可以使用 类名.__mro__ 或 类名.mro() 方法查看调用的先后顺序MRO(Method Resolution Order)方法解析顺序方法重写当 子类属性或方法 与 父类的属性或方法 名字相同 时 从父类继承下来的成员可以 重新定义多层继承指多个类之间的继承的层级关系多态Polymorphism同样一个函数在不同的场景下有不同的状态多态的条件1、有继承 定义父类、定义子类子类继承父类)2、函数重写 子类重写父类的函数3、父类引用指向子类对象 子类对象传给父类对象调用者class Bird: def fly(self): print(Bird can fly) class Penguin(Bird): def fly(self): print(Penguin cannot fly) class Eagle(Bird): def fly(self): print(Eagle can fly very high) def bird_flying_test(bird): bird.fly() bird Bird() penguin Penguin() eagle Eagle() bird_flying_test(bird) bird_flying_test(penguin) bird_flying_test(eagle)多态的优点提高代码的可扩展性和可维护性提高代码复用性 使程序更易于扩展和修改分离接口与实现抽象类与抽象方法抽象类含有 抽象方法 的 类抽象方法函数体是空实现的passclass ClassName(object): def function_one(self): pass def function_two(self): pass抽象类的核心特征1、必须包含抽象方法2、不能被实例化3、子类必须实现其抽象方法面向对象的其它特征类属性在类内部、方法外直接定义(变量名 值【类内函数外】类中所有对象共享该属性 当某一对象修改类属性时所有对象及类本身均受影响通过 类名.属性名 的方式访问推荐对象属性在函数中定义在 init 方法也属于函数或实例方法中通过 self. attribute的方式定义实例属性为某个对象所独有修改某个实例属性仅影响当前对象通过 对象名.属性名 的方式访问易与实例属性混淆类方法必须传入参数第一个参数 cls指向类本身装饰器classmethodclass ClassName(object): classmethod def function(cls): pass静态方法无需固定参数装饰器staticmethodclass ClassName(object): staticmethod def function(): pass面向过程Procedural Programming一种以过程Procedure为核心的编程范式核心思想自顶向下、逐步分解核心特点1、以函数为基本单元2、线性执行流程从主函数开始依次调用其它函数3、数据与操作分离4、自顶向下的设计面向对象与面向过程的区别面向过程以“过程”为中心将程序分解为一系列步骤或函数强调“如何做”。面向对象以“对象”为中心将数据和行为封装为对象强调“谁来做”。

相关新闻

如何实现ElasticJob任务依赖调度:5个简单方法解决复杂任务编排难题

如何实现ElasticJob任务依赖调度:5个简单方法解决复杂任务编排难题

如何实现ElasticJob任务依赖调度:5个简单方法解决复杂任务编排难题 【免费下载链接】shardingsphere-elasticjob Distributed scheduled job 项目地址: https://gitcode.com/gh_mirrors/shar/shardingsphere-elasticjob 你是否遇到过这样的问题:数…

2026/8/6 19:11:14 阅读更多 →
【软件系统架构案例分析 Day 9】性能战术:千万级QPS秒杀系统设计

【软件系统架构案例分析 Day 9】性能战术:千万级QPS秒杀系统设计

【Day 9】性能战术:千万级QPS秒杀系统设计 一、题目还原 某大型电商平台计划在"618"大促期间推出限量秒杀活动,预计活动开始瞬间将迎来千万级QPS的并发请求洪峰(历史最高峰值约1200万QPS),而常规业务峰值仅约…

2026/8/6 19:10:13 阅读更多 →
Windows软件总提示缺少DLL文件?VisualCppRedist AIO一键解决所有兼容性问题

Windows软件总提示缺少DLL文件?VisualCppRedist AIO一键解决所有兼容性问题

Windows软件总提示缺少DLL文件?VisualCppRedist AIO一键解决所有兼容性问题 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 还在为Windows系统上软件…

2026/8/6 19:10:13 阅读更多 →

最新新闻

PyDracula架构深度解析:现代Python GUI框架的技术实现与设计哲学

PyDracula架构深度解析:现代Python GUI框架的技术实现与设计哲学

PyDracula架构深度解析:现代Python GUI框架的技术实现与设计哲学 【免费下载链接】Modern_GUI_PyDracula_PySide6_or_PyQt6 项目地址: https://gitcode.com/gh_mirrors/mo/Modern_GUI_PyDracula_PySide6_or_PyQt6 项目价值定位:解决Python桌面应…

2026/8/7 2:38:34 阅读更多 →
三步实现飞书文档高效转换:Cloud Document Converter终极指南

三步实现飞书文档高效转换:Cloud Document Converter终极指南

三步实现飞书文档高效转换:Cloud Document Converter终极指南 【免费下载链接】cloud-document-converter Convert Lark Doc to Markdown 项目地址: https://gitcode.com/gh_mirrors/cl/cloud-document-converter 你是否曾经为将飞书文档转换为Markdown格式而…

2026/8/7 2:38:34 阅读更多 →
视频下载助手:3分钟掌握全网视频下载的终极方案

视频下载助手:3分钟掌握全网视频下载的终极方案

视频下载助手:3分钟掌握全网视频下载的终极方案 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 你是否曾经遇到过这样的困境&…

2026/8/7 2:38:34 阅读更多 →
技术赋能效率革命:自动化脚本与工具链如何重塑时间管理

技术赋能效率革命:自动化脚本与工具链如何重塑时间管理

这次我们来看一个关于时间感知与效率提升的技术项目。虽然标题“如何把暑假变长100倍?”听起来像是一个生活技巧或哲学问题,但在技术领域,它通常指向一个核心议题: 如何通过技术工具和方法,在单位时间内创造更高的价值…

2026/8/7 2:38:34 阅读更多 →
3D打印跑到1000mm/s,到底靠不靠谱?我们找10位用户实测

3D打印跑到1000mm/s,到底靠不靠谱?我们找10位用户实测

现在的FDM 3D打印机,速度一个比一个喊得快。300mm/s、600mm/s,甚至1000mm/s,数字看起来很猛。但普通用户真正关心的,并不是参数表上写得有多快,而是实际打印时到底能跑多快,以及速度拉高之后,模…

2026/8/7 2:38:34 阅读更多 →
数字绘画全流程拆解:从线稿到光影氛围的实战指南

数字绘画全流程拆解:从线稿到光影氛围的实战指南

睡过头的花店老板娘:从线稿到光影氛围的完整数字绘画过程拆解 你是不是也遇到过这种情况:脑子里有一个绝妙的画面,但打开绘画软件后,却不知道从哪里下笔?或者画到一半,总觉得色彩灰暗、光影平淡&#xff0c…

2026/8/7 2:37:34 阅读更多 →

日新闻

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy 想要将Android手机屏幕完美投射到电脑上,享受大屏操作的自…

2026/8/7 0:00:19 阅读更多 →
如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南 【免费下载链接】tom-select Tom Select is a lightweight (~16kb gzipped) hybrid of a textbox and select box. Forked from selectize.js to provide a framework agnostic autocomplete widget wi…

2026/8/7 0:00:19 阅读更多 →
5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件 【免费下载链接】nsz NSZ - Homebrew compatible NSP/XCI compressor/decompressor 项目地址: https://gitcode.com/gh_mirrors/ns/nsz 你是否在为Nintendo Switch游戏文件占用大量存储…

2026/8/7 0:00:19 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/6 22:02:27 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/6 22:02:27 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/5 23:28:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/6 22:02:28 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/5 23:46:51 阅读更多 →