python面向对象设计核心是用类清晰表达“谁在做什么、为什么这么做”,强调职责内聚、组合优于继承、属性封装、方法小而专。

Python面向对象设计不是堆砌class,而是用类来清晰表达“谁在做什么、为什么这么做”。核心是让代码更易理解、可维护、可扩展,而不是追求形式上的“封装继承多态”。
用类封装“有明确职责的实体”
别为了OOP而OOP。一个类应该代表一个真实或逻辑上内聚的概念,比如User、PaymentProcessor、ConfigLoader,而不是把一堆函数硬塞进class里。
- 如果某个类的方法总要传入大量相同参数(如db_conn、logger),说明它可能该封装成类的属性——这是职责内聚的信号
- 避免“工具类”(如StringUtils、MathHelper):Python中普通函数+模块组织更自然;真需要状态或配置时再考虑类
- 类名用名词,方法名用动词:User.activate() 比 User.do_activation() 更直接
优先组合,谨慎继承
继承容易导致脆弱的耦合。90%的场景下,用组合(has-a)比继承(is-a)更灵活、更易测试。
本书全面介绍PHP脚本语言和MySOL数据库这两种目前最流行的开源软件,主要包括PHP和MySQL基本概念、PHP扩展与应用库、日期和时间功能、PHP数据对象扩展、PHP的mysqli扩展、MySQL 5的存储例程、解发器和视图等。本书帮助读者学习PHP编程语言和MySQL数据库服务器的最佳实践,了解如何创建数据库驱动的动态Web应用程序。
- 想复用行为?优先用__init__注入依赖,或定义清晰接口(协议/抽象基类),而非继承父类
- 继承只在语义严格成立时使用:比如AdminUser 是 User 的一种,且子类确实扩展了父类的“身份本质”,而不是仅仅加几个方法
- 用abc.ABC和@abstractmethod定义契约,比继承具体类更能支持多态和替换
属性访问走@property,不暴露公有字段
把数据当作实现细节隐藏起来。即使现在只是简单赋值,也用@property起步——后续加校验、缓存、日志都无需改调用方。
立即学习“Python免费学习笔记(深入)”;
- 避免user.name = "xxx"直接写字段;改成@name.setter,哪怕初始逻辑为空
- 计算属性(如full_name)用@property,不加括号调用更符合直觉
- 真需要可变内部状态?用私有属性(_name或__name)+ 明确的公共接口控制,而非开放所有字段
方法小而专,单职责,少参数
一个方法只做一件事,并做好。参数超过3个就该警惕——可能是职责过重,或该拆分成多个对象协作。
- 把流程拆成步骤方法:process_order() → 调用 _validate(), _reserve_stock(), _charge_payment()
- 用**kwargs或数据类(dataclass)收拢可选参数,避免长参数列表
- 方法名体现意图:send_notification() 比 handle_something() 清晰得多







