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

Python 3.12 OOP - 01 - Overview

Python 3.12 OOP - Overview


第一章:面向对象编程基础

1.1 类与对象的基本概念
1.2 属性与方法
1.3 构造函数__init__与析构函数__del__
1.4 实例属性与类属性
1.5 方法的类型:实例方法、类方法、静态方法
1.6 访问控制与名称修饰(Name Mangling)

第二章:继承与多态

2.1 单继承与多重继承
2.2 方法重写(Override)与super()
2.3 方法解析顺序(MRO)
2.4 抽象基类(ABC)与abc模块
2.5 鸭子类型与协议(Protocols)

第三章:特殊方法(魔术方法)与运算符重载

3.1 对象创建与销毁:__new____init____del__
3.2 字符串表示:__str____repr____format__
3.3 容器模拟:__len____getitem____setitem____delitem____contains__
3.4 属性访问控制:__getattr____setattr____delattr____getattribute__
3.5 可调用对象:__call__
3.6 比较运算符:__eq____lt____le____gt____ge____ne__
3.7 算术运算符:__add____sub____mul____truediv__等及其反向、增量版本
3.8 类型转换:__int____float____bool____bytes____complex____index__
3.9 上下文管理器:__enter____exit__
3.10 可迭代与迭代器:__iter____next__
3.11 描述符协议:__get____set____delete____set_name__
3.12 其他特殊方法:__hash____dir____slots__

第四章:描述符(Descriptor)

4.1 描述符协议详解
4.2 数据描述符与非数据描述符
4.3 内置描述符:propertystaticmethodclassmethod
4.4 自定义描述符与应用(类型检查、惰性计算)
4.5 描述符与__slots__的协同

第五章:元类(Metaclass)

5.1 什么是元类?类也是对象
5.2type元类与动态创建类
5.3 自定义元类:__new____init____call__
5.4 元类与类装饰器的对比
5.5 常见元类应用:单例、注册子类、ORM 框架

第六章:数据类(dataclasses

6.1 为什么需要数据类?
6.2@dataclass装饰器与参数详解
6.3 字段(Field)的配置:defaultdefault_factoryinitrepr
6.4 继承与数据类
6.5 数据类与不可变性(frozen=True

第七章:枚举(enum

7.1 枚举的基本使用
7.2 自动值与auto()
7.3 枚举的成员与迭代
7.4 功能性扩展与Enum的高级用法

第八章:协议(Protocols)与类型化的鸭子类型

8.1 静态鸭子类型与typing.Protocol
8.2 运行时协议实现
8.3 与抽象基类的区别

第九章:面向对象设计模式与 Python 实践

9.1 单例模式(多种实现)
9.2 工厂模式(简单工厂、工厂方法、抽象工厂)
9.3 观察者模式
9.4 策略模式
9.5 装饰器模式(与语言装饰器的区别)

第十章:Python 3.12 中面向对象的新特性(与 3.11 对比)

10.1 模式匹配(match/case)与对象解构
10.2 泛型类型别名(type语句)
10.3 更友好的错误信息与调试支持
10.4 性能优化在面向对象层面的体现


第一章:面向对象编程基础

1.1 类与对象的基本概念

面向对象编程(OOP)是一种程序设计范式,它将数据和操作数据的方法封装在一起,形成“对象”。在 Python 中,一切皆对象:整数、字符串、列表甚至函数都是对象。类(class)是创建对象的蓝图,定义了一组属性和方法;对象(object)是类的实例。

定义类

classDog:pass

创建对象

my_dog=Dog()

类使用class关键字定义,通常遵循首字母大写的命名惯例。

1.2 属性与方法

属性是对象的数据,方法是对象可以执行的操作。

classDog:def__init__(self,name,age):self.name=name# 实例属性self.age=agedefbark(self):# 实例方法print(f"{self.name}says Woof!")d=Dog("Buddy",3)d.bark()# Buddy says Woof!

1.3 构造函数__init__与析构函数__del__

__init__是初始化方法,在对象创建后立即调用,用于设置初始状态。__del__是析构方法,在对象被垃圾回收前调用,用于清理资源,但由于调用时机不确定,不推荐依赖它。

classFileHandler:def__init__(self,filename):self.file=open(filename,'r')def__del__(self):self.file.close()

更推荐使用上下文管理器(with)进行资源管理。

1.4 实例属性与类属性

  • 实例属性:通过self绑定,每个实例独立。
  • 类属性:直接在类体中定义,所有实例共享。
classStudent:school="MIT"# 类属性def__init__(self,name):self.name=name# 实例属性s1=Student("Alice")s2=Student("Bob")print(s1.school)# MITStudent.school="Harvard"print(s2.school)# Harvard

1.5 方法的类型:实例方法、类方法、静态方法

  • 实例方法:第一个参数self,绑定到实例。
  • 类方法:使用@classmethod,第一个参数cls,绑定到类。
  • 静态方法:使用@staticmethod,没有特殊参数,本质是普通函数。
classCalculator:@classmethoddefunit(cls):returncls.__name__@staticmethoddefadd(a,b):returna+b

1.6 访问控制与名称修饰

Python 没有严格的私有成员,但约定使用单下划线_表示“保护”,双下划线__触发名称修饰(name mangling),避免子类意外覆盖。

classMyClass:def__init__(self):self._protected=1# 保护成员(约定)self.__private=2# 名称修饰为 _MyClass__privateobj=MyClass()print(obj._protected)# 仍可访问# print(obj.__private) # AttributeErrorprint(obj._MyClass__private)# 2

名称修饰主要用于避免继承时的方法名冲突,并不提供真正的安全性。 接下来,会继续介绍面向对象的继承与多态。

如果在学习过程中遇到问题,欢迎在评论区留言讨论!

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

相关文章:

  • UV展开技术:ABF++与LSCM算法对比与优化实践
  • 网盘直链下载助手完整指南:八大网盘真实下载地址一键获取终极解决方案
  • Python配置热更新实战:3步实现零停机动态加载,99.99%服务可用性保障
  • Depth Anything V2:让AI看懂三维世界的“深度眼睛“ [特殊字符]️
  • Tcl文件操作保姆级教程:从open/close到read/gets/puts,手把手教你读写文件不踩坑
  • 5分钟掌握BOTW-Save-Editor-GUI:塞尔达传说存档修改终极指南
  • 从通讯库到可视化工具:一步步封装C# FinsTCP库为欧姆龙PLC读写软件
  • macOS菜单栏管理架构演进:从系统约束到设计哲学的技术深度解析
  • 3步掌握SRWE:突破游戏窗口限制,实现任意分辨率自由
  • 如何快速掌握开源PLC编程:OpenPLC Editor完全指南
  • Windows安卓应用安装革命:APK Installer重构跨平台应用生态
  • Anno 1800 Mod Loader终极指南:3步轻松实现游戏模组加载
  • 外卖订单数据自动化采集解决方案:Node.js爬虫架构深度解析与实战
  • 别再死记公式了!用Python脚本帮你搞定Setup/Hold Time的Slack计算与违例检查
  • 3分钟搞定全网歌词下载:163MusicLyrics免费工具终极指南
  • 想玩一玩STC32G144K246,却遇到了挫折
  • 在 Node.js 后端服务中集成 Taotoken 多模型 API 的实践指南
  • Lenovo Legion Toolkit完整指南:拯救者笔记本终极性能优化教程
  • Tinke:终极免费的NDS游戏资源提取与修改工具完整指南
  • OpenAI GPT-5.4正式上线:推理、编程与智能体三合一,这家巨头终于想通了
  • 别再凭感觉选MOS管驱动电压了!手把手教你从Datasheet曲线图找到VGS最佳值
  • 3种强力方案解决GoPro相机在go2rtc中的自动休眠问题
  • 破解CUDA版本迷宫:让bitsandbytes在复杂环境中优雅运行
  • 可靠酱肉小笼包品牌怎么选?2026热门推荐揭秘,酱肉小笼包/非遗红油小笼包/包子/小笼包,酱肉小笼包加盟口碑推荐分析 - 品牌推荐师
  • 零成本部署GPT-3.5 API代理:Aurora项目实战与安全调优指南
  • 从防御者视角复盘:我如何用Apache配置和WAF规则,堵住CTFHub里这些文件上传的坑
  • YOLO11涨点优化:Neck二次创新 | 引入GFPN (泛化特征金字塔),更密集的跳跃连接带来更丰富的语义表达
  • APK安装器技术深度解析:Windows平台安卓应用安装架构设计与实现指南
  • STM32F4 RTC时钟不准?手把手教你校准LSE晶振和配置后备域(含CubeMX配置)
  • 终极Windows组策略编辑解决方案:Policy Plus让所有版本都能享受专业级配置