当前位置: 首页 > news >正文

面向对象与面向过程


目录

类与对象

类(Class)

定义类

self 关键字

“魔法方法”

对象(Object)

定义对象

获取属性及调用方法

面向对象(Object-Oriented,OO)

封装(Encapsulation)

继承(Inheritance)

多态(Polymorphism)

抽象类与抽象方法

面向对象的其它特征

面向过程(Procedural Programming)

面向对象与面向过程的区别


类与对象

类(Class)

对一类具有相同属性方法对象的抽象描述

属性(Attributes):描述对象的特征或状态(也称为成员变量)

方法(Methods):描述对象的行为或功能(也称为成员函数)

  • 定义类
class ClassName(object): attribute = value # 定义类的属性(变量) def __init__(self): self.attribute = value # 定义实例的属性【self关键字只能在函数内】 def function(self): # 定义类的方法(函数) pass
  • self 关键字

代表 指向 类 的当前实例对象(谁调用函数,self就是谁)

为 实例方法 提供 访问该实例自身属性和方法 的 引用

类方法的第一个参数,指向 调用该方法 的 实例对象

  • “魔法方法”

【在特殊情况下会被自动调用】

def __init__(): 在定义 对象 时会被自动调用执行

def __init__(self, color, number): self.color = color self.number = number

def __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-Oriented,OO)

一种编程范式(程序设计思想)一切皆对象】

以对象为核心,通过封装、继承、多态等机制,组织和复用代码

优点:模块化、复用性、灵活性

  • 封装(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)

多态的优点:

提高代码的可扩展性和可维护性

提高代码复用性 使程序更易于扩展和修改

分离接口与实现

  • 抽象类与抽象方法

抽象类:含有 抽象方法 的 类

抽象方法:函数体是空实现的(pass)

class ClassName(object): def function_one(self): pass def function_two(self): pass

抽象类的核心特征:

1、必须包含抽象方法

2、不能被实例化

3、子类必须实现其抽象方法

  • 面向对象的其它特征

类属性:

在类内部、方法外直接定义(变量名 = 值)【类内函数外】

类中所有对象共享该属性 当某一对象修改类属性时,所有对象及类本身均受影响

通过 类名.属性名 的方式访问(推荐)

对象属性:

在函数中定义:在 init 方法(也属于函数)或实例方法中通过 self. attribute的方式定义

实例属性为某个对象所独有,修改某个实例属性仅影响当前对象

通过 对象名.属性名 的方式访问(易与实例属性混淆)

类方法:

必须传入参数:第一个参数 cls(指向类本身)

装饰器:@classmethod

class ClassName(object): @classmethod def function(cls): pass

静态方法:

无需固定参数

装饰器:@staticmethod

class ClassName(object): @staticmethod def function(): pass

面向过程(Procedural Programming)

一种以过程(Procedure)为核心的编程范式

核心思想:自顶向下、逐步分解

核心特点:

1、以函数为基本单元

2、线性执行流程:从主函数开始,依次调用其它函数

3、数据与操作分离

4、自顶向下的设计

面向对象与面向过程的区别

面向过程:以“过程”为中心,将程序分解为一系列步骤或函数,强调“如何做”。

面向对象:以“对象”为中心,将数据和行为封装为对象,强调“谁来做”。


http://www.jsqmd.com/news/1341546/

相关文章:

  • CMF by Nothing首款耳夹耳机Clip Pro登场,定价549元能否填补市场空白?
  • 广州职务类经济犯罪刑事律师哪个优秀:【法纳刑辩】战绩斐然 - 秋山寄远
  • Inkling-Small-mlx-3bit性能测试:实测Mac上的加载速度与文本生成效率
  • 谷歌传奇 Jeff Dean 离职,曾凭一己之力搭建互联网底层技术栈!
  • 深度解析网站建设管理流程及关键节点把控指南
  • timevis与Crosstalk结合:打造联动可视化的数据分析工具
  • Tapo项目常见问题解决:从连接失败到功能异常的15个 troubleshooting 技巧
  • 2026东莞锡膏回收公司哪家好?口碑实力推荐豪发废锡回收 - geo88
  • Unity新手实战:从零开发“跳一跳”游戏,掌握2D/3D游戏开发核心模块
  • 视频处理效率工具盘点:压缩、裁剪、转格式、转文字的一站式方案
  • 为什么开发者都爱用Plupload?3分钟掌握强大文件上传方案
  • Unity ET框架与Test Runner集成:构建异步ECS架构的自动化测试方案
  • 训练自己的离散扩散模型:Score-Entropy-Discrete-Diffusion完整训练流程与参数调优
  • 2026指南:公路工程施工总承包二级代办服务公司——粤泓(深圳)建筑咨询有限公司专业实力解析 - 卓企推荐
  • 聊聊Java循环底层坑点与极致性能优化实战
  • 智能体重复调用工具无结果:循环检测与退出机制设计
  • 身份证信息查询接口新手调用指南
  • 疯狂电路赛道公布到什么程度?
  • 终极IPTV播放列表检测指南:如何一键验证上千个频道可用性
  • 从零开始构建开源协作机械臂:OpenArm完全指南
  • 2026年8月6日科技热点新闻(带原链接)
  • AI时代服务业增长新引擎:合肥GEO优化让品牌被看见
  • 广州大型企业高管经济犯罪律师哪个优秀:【法纳刑辩】卓越非凡 - 秋山寄远
  • 主管药师网课有什么推荐?从“单点突破”到“系统通关”的备考进阶指南 - 精彩城市
  • 国际首都公报:放飞炬人集团代理放楚帝国起草《放楚帝国平民法令》
  • 海牙认证需要做公证吗?别白跑,材料准备清单请收好
  • Intel RealSense MATLAB开发者包实战指南:深度相机数据处理与三维重建进阶
  • CVE-2026-64392 漏洞解析:ksmbd 延迟删除凭据误用引发越权销毁风险处置方案
  • 2027北京消费电子展官方预定!6月举办,展前预匹配系统精准对接
  • 20款现代化Blender主题:让3D创作界面焕然一新