
Python面向对象设计不是堆砌class,而是用好封装、继承和多态来降低耦合、提升可维护性。核心在于让类职责单一、接口稳定、行为可替换——这比语法正确更重要。
单一职责:一个类只做一件事
类的职责越聚焦,越容易测试、复用和修改。比如把“用户登录”和“发送邮件”混在一个User类里,后续改邮箱服务就得动登录逻辑。
- 拆分方式:把数据管理(如User)、业务动作(如Authenticator)、外部交互(如EmailSender)各自独立成类
- 判断信号:类里有大量if判断不同场景、方法名包含“and”或“or”(如save_and_notify)、单元测试要mock一堆不相关的依赖
- 示例:User只存字段和基础验证;LoginService负责密码比对与会话生成;Notifier负责发短信/邮件,通过接口注入而非硬编码
用组合代替继承,优先依赖抽象
Python的多重继承易引发MRO混乱,而继承常导致子类被迫承担父类无关的职责。组合更灵活,也更贴近现实关系。
ThinkPHP是一个快速、简单的基于MVC和面向对象的轻量级PHP开发框架,遵循Apache2开源协议发布,从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,尤其注重开发体验和易用性,并且拥有众多的原创功能和特性,为WEB应用开发提供了强有力的支持。 3.2版本则在原来的基础上进行一些架构的调整,引入了命名空间支持和模块化的完善,为大型应用和模块化开发提供了更多的便利。
- 把“is-a”关系(如Dog is-an Animal)换成“has-a”或“uses-a”(如Robot has-a PowerSource,uses-a Navigator)
- 定义清晰协议(Protocol)或抽象基类(ABC),让具体实现自由替换。例如用class PaymentProcessor(ABC)约束process()方法,再写StripeProcessor和PayPalProcessor
- 避免深度继承链(如A → B → C → D),超过两层就该考虑是否该提取中间抽象或改用策略模式
隐藏内部状态,暴露小而稳定的接口
Python没有private关键字,但下划线约定(_field, __field)+属性控制(@property)能有效传达意图并防止误用。
立即学习“Python免费学习笔记(深入)”;
- 所有属性默认设为私有,仅通过方法或property提供受控访问。例如user.balance应是只读property,修改走user.deposit(amount)或user.withdraw(amount)
- 避免在构造函数中做重操作(如连接数据库、读大文件),改用工厂函数或显式初始化方法(obj.setup())
- 接口命名保持一致:get_xxx()、to_dict()、validate()比xxx_data()、as_json()、check_ok()更易理解
利用Python特性写更自然的OOP
不必强行模仿Java/C++。Python的鸭子类型、魔法方法、描述符、contextlib等,能让类更简洁、更具表现力。
- 用__str__和__repr__提供调试友好输出;用__eq__和__hash__支持集合操作
- 用__enter__/__exit__让类支持with语句(如数据库连接、临时配置切换)
- 用@dataclass减少样板代码,配合frozen=True和slots=True提升不可变性和性能







