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

小菜鸟学习Python——Day2之Python面向对象

作为 Python 初学者,面向对象编程(OOP)是代码必不可少的基石,而类属性、三大特性(封装、继承、多态),再搭配闭包与装饰器两个高阶语法糖,能让你的代码从“能用”升级为”高效”。

接下来我们就来一起学习一下吧!

一.类属性与实例属性

在 Python 类中,属性分两种,这是理解面向对象的第一步:

  • 实例属性:每个对象独有的数据,通过self定义,互不干扰
  • 类属性:属于类本身,所有实例共享一份数据,直接通过类名访问
class Student: # 类属性:所有学生共享 school = "Python 大学" def __init__(self, name): # 实例属性:每个学生独有 self.name = name # 测试 s1 = Student("小明") s2 = Student("小红") # 类属性:所有实例共享 print(Student.school) # 输出:Python 大学 print(s1.school, s2.school) # 输出:Python 大学 Python 大学 # 实例属性:互不干扰 print(s1.name, s2.name) # 输出:小明 小红 # 修改类属性:所有实例同步生效 Student.school = "Python 学院" print(s1.school) # 输出:Python 学院

总结

  • 类属性:公共数据,全局共享,修改一处,全部生效
  • 实例属性:个体数据,独立存储,互不影响

二.面向对象三大特性

(1)封装

封装是面向对象的“锁”,核心思想:

  1. 把属性和方法打包到一个类中
  2. 将数据私密化,防止数据泄露
  3. 禁止外部直接修改内部数据

Python中用双下划线__定义私有属性/方法,外部无法直接访问。

class User: def __init__(self, name, password): self.name = name # 公有属性 self.__password = password # 私有属性:外部无法直接访问 # 公开方法:提供安全的访问/修改接口 def check_password(self, pwd): return self.__password == pwd def set_password(self, old_pwd, new_pwd): # 封装校验逻辑:必须验证旧密码才能修改 if self.check_password(old_pwd): self.__password = new_pwd print("密码修改成功") else: print("旧密码错误") # 测试 user = User("张三", "123456") print(user.name) # 公有属性:可访问 # print(user.__password) # 报错:私有属性,外部禁止访问 user.set_password("123456", "654321") # 合法修改 print(user.check_password("654321")) # 输出:True

封装的价值

  • 保护数据不被随意篡改
  • 隐藏内部实现,对外只提供简单接口
  • 代码更安全、更易维护

(2)继承

继承是面向对象的「复制粘贴 + 升级」,核心:

  • 子类自动拥有父类的所有属性和方法
  • 子类可以重写父类方法,实现个性化功能
  • 极大减少重复代码,实现代码复用

Python 支持单继承多继承,语法极简。

# 父类:基础功能 class Animal: def __init__(self, name): self.name = name def speak(self): print("动物在叫") # 子类:继承父类,扩展功能 class Dog(Animal): # 重写父类方法 def speak(self): print(f"{self.name}:汪汪汪") class Cat(Animal): def speak(self): print(f"{self.name}:喵喵喵") # 测试 dog = Dog("旺财") cat = Cat("咪咪") dog.speak() # 输出:旺财:汪汪汪 cat.speak() # 输出:咪咪:喵喵喵

继承的核心

  • (父类):一键继承所有功能子类
  • 方法重写:子类可以覆盖父类方法,实现定制化
  • 遵循「开闭原则」:对扩展开放,对修改关闭

(3)多态

多态是继承的进阶,核心一句话:不同子类对象,调用同一个方法,呈现不同的行为

多态的前提:继承 + 方法重写

# 统一接口:接收任意动物对象,调用 speak 方法 def make_speak(animal): animal.speak() # 测试:传入不同对象,执行不同逻辑 dog = Dog("旺财") cat = Cat("咪咪") make_speak(dog) # 输出:旺财:汪汪汪 make_speak(cat) # 输出:咪咪:喵喵喵

多态的价值

  • 代码更灵活,无需为每个子类写单独逻辑
  • 扩展性极强:新增子类,无需修改原有代码

三.闭包:Python 高阶函数的灵魂

闭包是装饰器的基础,不是面向对象,但和 OOP 相辅相成,核心定义:

  1. 函数嵌套定义
  2. 内部函数引用了外部函数的变量
  3. 外部函数返回内部函数

闭包的作用:保留外部函数的局部变量,实现数据持久化

def math(): a = 10 #使用闭包 def inner(): print(a) return inner inner = math() inner()

闭包核心

  • 延长局部变量的生命周期
  • 实现数据隐藏,比全局变量更安全
  • 是装饰器的底层原理

四.装饰器:给函数加功能

装饰器是闭包的经典应用,核心作用:不修改原函数代码,不修改调用方式,动态给函数添加功能

# 装饰器:记录函数执行时间 import time def timer(func): def wrapper(): start = time.time() func() # 执行原函数 end = time.time() print(f"执行耗时:{end - start:.2f}秒") return wrapper # 使用装饰器:一行代码加功能 @timer def test(): time.sleep(1) print("函数执行完毕") # 调用:和原来完全一样,却自动拥有计时功能 test()

装饰器的价值

  • 代码解耦,业务逻辑与通用功能分离
  • 不改动原函数
  • 复用性强,一个装饰器给所有函数使用

五.总结:知识串联,从基础到高阶

  1. 类与属性:面向对象的基础,封装数据与行为
  2. 封装:保护数据,隐藏实现,暴露接口
  3. 继承:复用代码,扩展功能
  4. 多态:灵活调用,提高扩展性
  5. 闭包:高阶函数基础,保留变量状态
  6. 装饰器:闭包的应用,无侵入增强功能

一句话总结:用类和封装定义数据安全的对象,用继承复用代码,用多态提升灵活度,用闭包和装饰器优化代码结构 —— 这就是 Python 优雅编程的核心。

学习Python类属性、封装、继承、多态及闭包、装饰器的过程,是我从懵懂到通透的进阶之旅。

起初我混淆类属性与实例属性,忽视封装的重要性,也难以理解闭包与装饰器的逻辑。

通过实操踩坑,我逐渐吃透核心:封装保障数据安全,继承实现代码复用,多态提升灵活性,闭包与装饰器则优化代码结构、实现功能复用。

下期预告:FastAPI基础入门

作者:不爱编程的同学127 日期:2026.4.12

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

相关文章:

  • Phi-3-vision-128k-instruct企业级应用:智能合同与票据信息提取系统
  • 2026奇点智能技术大会核心成果(视觉导航Agent工业级部署白皮书首曝)
  • Linux入门--实用指令
  • Ubuntu下ttf-mscorefonts-installer的安装与Python中Times New Roman字体的应用指南
  • WeiboImageReverse:一键追溯微博图片来源的Chrome神器
  • HunyuanVideo-Foley自动化测试实践:构建音效生成质量评估流水线
  • Qwen3-Reranker-0.6B与YOLOv8结合:智能图像检索系统构建
  • 驾驶行为识别图像数据集 疲劳驾驶图像识别数据集 驾驶员闭眼识别 开车打盹图像识别人员疲劳状态识别图像数据集 YOLO第10332期
  • Cesium GLSL材质实战:构建动态雷达扫描效果
  • <%= projectName %>
  • 【SCI电气】考虑不同充电需求的电动汽车有序充电调度方法附Matlab代码
  • 5个步骤让普通鼠标在macOS上获得超越苹果触控板的体验
  • 2026深度评测:ChatGPT模型功能完整性全解析——技术标杆的全能边界与本土化困境
  • 为什么92%的AIAgent项目在V2迭代期失败?SITS2026模式集锁定的8个隐性架构债(含检测脚本)
  • Earth Online网站下载ENVISAT ASAR数据:批量下载32景影像的实战经验与效率优化
  • 每日两道算法题(第四天)(01背包,模拟+素数)
  • 3步开启你的Web游戏模拟器:EmulatorJS完全指南
  • vLLM-v0.17.1详细步骤:NVIDIA/AMD/Intel多平台GPU算力适配指南
  • 告别环境依赖!用Auto-Py-To-Exe把YOLOv5项目打包成独立EXE(附避坑指南)
  • Linux入门--远程登录与用户管理
  • Win11Debloat终极指南:一键清理Windows 11预装垃圾,让你的系统重获新生
  • ViPER4Windows终极修复指南:简单三步解决Windows 10/11音频兼容性问题 [特殊字符]
  • 【国家级AI系统审计指南】:基于NIST AI RMF与OWASP Top 10 for LLMs的AIAgent双模日志审计框架
  • 从零上手谷歌Colab:免费GPU环境搭建与个人数据集加载实战
  • Graphite代码审查自动化实践
  • CHORD-X视觉战术指挥系统Python爬虫数据注入:开源情报自动收集与分析
  • 教育大模型落地难?SITS2026 AIAgent案例全链路复盘,从Prompt工程到教育伦理审查,12个关键决策点不容错过
  • 2026年贵州智慧停车与智能安防一站式解决方案深度横评|官方联系直达 - 精选优质企业推荐榜
  • 终极离线语音转文字指南:如何在本地电脑上安全转录音频文件
  • 一文读懂机器学习与深度学习的区别是什么