news 2026/4/23 11:44:55

Python----面向对象的三大特性

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python----面向对象的三大特性

一、封装(Encapsulation)

1. 核心定义

封装是将数据(属性)操作数据的方法绑定在一起,隐藏对象的内部实现细节,仅通过公开的接口与外部交互。

  • 类比:像手机一样,你只需按按钮 / 触屏(接口)使用功能,无需知道内部电路板、芯片的工作原理(隐藏细节)。
  • 核心目的:提高代码安全性、可维护性,降低外部依赖。
2. Python 中的封装实现

Python 没有严格的 “私有” 关键字(如 Java 的private),但通过命名规范实现封装:

  • 普通属性/方法:公开的,外部可直接访问;
  • _属性/方法:约定俗成的 “受保护” 成员,外部不建议访问(仅提醒,仍可访问);
  • __属性/方法:私有成员,Python 会自动改名(名称修饰),外部无法直接访问。

python

class Phone: # 封装:将属性和方法绑定在类中 def __init__(self, brand, price): self.brand = brand # 公开属性 self._price = price # 受保护属性(约定) self.__system = "Android" # 私有属性(名称修饰) # 公开接口:提供外部访问私有属性的方式 def get_system(self): return self.__system # 公开接口:提供修改私有属性的逻辑(可加校验) def set_system(self, new_system): if new_system in ["Android", "iOS"]: self.__system = new_system else: print("不支持的系统类型!") # 封装的方法:内部逻辑对外隐藏 def __call_phone(self): print("正在拨打电话...") # 公开接口:调用私有方法 def make_call(self): self.__call_phone() # 测试封装 if __name__ == "__main__": p = Phone("小米", 2999) # 访问公开属性/方法 print(p.brand) # 输出:小米 p.make_call() # 输出:正在拨打电话... # 访问受保护属性(不建议,但可访问) print(p._price) # 输出:2999 # 直接访问私有属性/方法 → 报错 # print(p.__system) # AttributeError # p.__call_phone() # AttributeError # 通过公开接口访问/修改私有成员 print(p.get_system()) # 输出:Android p.set_system("iOS") print(p.get_system()) # 输出:iOS p.set_system("Windows") # 输出:不支持的系统类型!
3. 封装的价值
  • 隐藏内部实现:比如__call_phone的逻辑修改后,外部调用make_call无需改动;
  • 控制访问权限:比如set_system中加校验,避免非法值赋值;
  • 降低耦合:外部仅依赖公开接口,不依赖内部细节。

二、继承(Inheritance)

1. 核心定义

继承是子类复用父类的属性和方法,同时可新增 / 重写功能,实现代码复用层级拓展

  • 父类(基类 / 超类):被继承的类,提供通用属性 / 方法;
  • 子类(派生类):继承父类的类,可定制专属逻辑;
  • 核心目的:减少重复代码,梳理类的层级关系。
2. 关键用法(单继承为主,多继承慎用)

python

# 父类:通用的手机类 class Phone: def __init__(self, brand): self.brand = brand def call(self): print(f"{self.brand}手机拨打电话") def send_msg(self): print(f"{self.brand}手机发送短信") # 子类:继承Phone,拓展智能功能 class SmartPhone(Phone): def __init__(self, brand, ram): # 调用父类初始化方法(复用父类逻辑) super().__init__(brand) self.ram = ram # 新增属性 # 重写父类方法(定制逻辑) def call(self): super().call() # 保留父类逻辑 print(f"{self.brand}手机支持视频通话") # 新增方法 def play_game(self): print(f"{self.brand}手机({self.ram}内存)玩游戏") # 测试继承 if __name__ == "__main__": sp = SmartPhone("华为", "8GB") sp.call() # 输出:华为手机拨打电话 → 华为手机支持视频通话 sp.send_msg() # 复用父类方法:华为手机发送短信 sp.play_game() # 新增方法:华为手机(8GB内存)玩游戏
3. 继承的核心规则
  • super():按 MRO(方法解析顺序)调用父类方法,多继承时避免逻辑混乱;
  • 方法重写:子类方法名与父类一致时,覆盖父类方法;
  • 所有 Python 类默认继承object(顶级基类)。

三、多态(Polymorphism)

1. 核心定义

多态指同一行为(方法)作用于不同对象时,表现出不同的行为特征。

  • 类比:同样是 “叫” 的行为,猫叫是 “喵喵”,狗叫是 “汪汪”;
  • 核心前提:继承(子类继承父类)+ 方法重写(子类重写父类方法);
  • 核心目的:提高代码灵活性,降低分支判断的复杂度。
2. Python 中的多态实现

Python 是动态类型语言,无需像 Java 那样显式声明接口,直接通过 “鸭子类型” 实现多态(只要对象有对应的方法,就可视为同一类型)。

python

# 父类:定义通用行为 class Animal: def make_sound(self): # 父类通用方法(可留空,或抛异常) raise NotImplementedError("子类必须重写该方法") # 子类1:重写父类方法,实现专属行为 class Cat(Animal): def make_sound(self): print("喵喵喵") # 子类2:重写父类方法,实现专属行为 class Dog(Animal): def make_sound(self): print("汪汪汪") # 子类3:重写父类方法,实现专属行为 class Duck(Animal): def make_sound(self): print("嘎嘎嘎") # 多态核心:统一接口,处理不同对象 def make_animal_sound(animal): # 无需判断animal的具体类型,只要有make_sound方法即可 animal.make_sound() # 测试多态 if __name__ == "__main__": # 创建不同子类实例 cat = Cat() dog = Dog() duck = Duck() # 同一函数,传入不同对象,表现不同行为 make_animal_sound(cat) # 输出:喵喵喵 make_animal_sound(dog) # 输出:汪汪汪 make_animal_sound(duck) # 输出:嘎嘎嘎
3. 多态的价值
  • 简化代码:无需写大量if-elif判断对象类型;
  • 拓展性强:新增Bird子类时,只需重写make_soundmake_animal_sound无需修改;
  • 符合 “开闭原则”:对拓展开放,对修改关闭。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/8 14:23:46

Python圣诞树代码实战:用代码点亮节日氛围

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个交互式Python圣诞树程序,要求:1. 使用pygame库 2. 点击空格键切换灯光效果 3. 按M键播放圣诞音乐 4. 树体可随鼠标移动轻微摇摆 5. 包含雪花飘落动…

作者头像 李华
网站建设 2026/4/22 13:30:15

TikTok API开发终极指南:快速构建社交数据分析平台

TikTok API开发终极指南:快速构建社交数据分析平台 【免费下载链接】tiktok-api Unofficial API wrapper for TikTok 项目地址: https://gitcode.com/gh_mirrors/tik/tiktok-api 想要掌握TikTok数据挖掘的核心技术吗?还在为如何获取精准的用户行为…

作者头像 李华
网站建设 2026/4/23 10:35:06

解锁AMD显卡隐藏性能:社区优化方案全解析

解锁AMD显卡隐藏性能:社区优化方案全解析 【免费下载链接】ROCmLibs-for-gfx1103-AMD780M-APU ROCm Library Files for gfx1103 and update with others arches based on AMD GPUs for use in Windows. 项目地址: https://gitcode.com/gh_mirrors/ro/ROCmLibs-fo…

作者头像 李华
网站建设 2026/4/19 12:45:06

Realtek RTL8125 2.5G网卡驱动:快速安装与性能优化终极指南

Realtek RTL8125 2.5G网卡驱动:快速安装与性能优化终极指南 【免费下载链接】realtek-r8125-dkms A DKMS package for easy use of Realtek r8125 driver, which supports 2.5 GbE. 项目地址: https://gitcode.com/gh_mirrors/re/realtek-r8125-dkms 想要在L…

作者头像 李华
网站建设 2026/4/22 15:38:38

终极游戏自动化神器:AhabAssistantLimbusCompany完全指南

终极游戏自动化神器:AhabAssistantLimbusCompany完全指南 【免费下载链接】AhabAssistantLimbusCompany AALC,大概能正常使用的PC端Limbus Company小助手 项目地址: https://gitcode.com/gh_mirrors/ah/AhabAssistantLimbusCompany 还在为《Limbu…

作者头像 李华
网站建设 2026/4/15 16:22:13

AhabAssistantLimbusCompany:边狱公司游戏自动化的终极解决方案

AhabAssistantLimbusCompany:边狱公司游戏自动化的终极解决方案 【免费下载链接】AhabAssistantLimbusCompany AALC,大概能正常使用的PC端Limbus Company小助手 项目地址: https://gitcode.com/gh_mirrors/ah/AhabAssistantLimbusCompany 还在为《…

作者头像 李华