这些年,我一直用基于类的风格写 Python,后来才发现:其实很多时候,用更简单的工具反而更合适。下面我来分享我的转变过程,说不定你也会有同感。
曾经有段时间,我几乎把所有代码都用类来写。总觉得这样才显得“专业”。毕竟,面向对象编程(OOP)一直被奉为金标准,对吧?但在实际开发过 API、自动化脚本和数据流水线之后,我逐渐意识到:大多数情况下,我其实并不那么需要类。甚至在很多项目中,类反而让我的开发效率变低了。
为什么我们曾如此迷恋类?
很多人初学编程时就被灌输:类是写出清晰、可扩展代码的基础。
我们学会了 __init__、继承、封装……没过多久,就开始为每一个小功能构建复杂的类层次结构。我以前也这样。代码里到处是这样的模板:但随着项目越来越大,我渐渐感觉到不对劲。类引入了太多“仪式感”,让本来简单的代码变得复杂。
更糟糕的是,它们有时反而把逻辑隐藏在过度抽象的背后。
那我后来用了什么替代方案?
首先,优先考虑函数如果一个功能不需要在多次调用之间保持状态,那它根本不需要类。
我现在默认都写普通函数,比如:
这样的代码读起来、测试起来、维护起来都更快。
数据类(dataclass),替代传统的类
如果我只需要保存数据,Python 的 @dataclass 是一个非常优雅的解决方案:
它优点很明显:代码更简洁自动生成 __init__、__repr__ 等方法保持轻量且可读性强我现在常用 dataclass 来表示数据传输对象(DTO)、配置或结构化参数。
字典:轻量级的状态保存方式
有时候,我甚至连数据类都不需要,一个普通的字典就足够了:
尤其在处理 JSON、API 响应或配置时,字典特别方便。
用模块实现单例模式
如果想在多个地方共享状态或工具方法,直接写一个模块就好——根本没必要特意写一个“单例类”。比方说,创建一个 email_utils.py:
没有类的负担,不需要实例化——清晰而扁平化的代码,舒服。
警惕“过早抽象”带来的问题
说到底,类最大的问题在于:
它们常常在我们真正需要抽象之前,就强行引入了抽象。这会导致你的代码:更难测试(“我应该模拟这个类还是方法?”)更啰嗦不够“Pythonic”——不符合 Python 简洁明了的哲学我现在越来越倾向于利用 Python 本身的优势——简单、可读性强、直白——这样写出来的代码反而更健壮。在很多脚本、微服务或 ETL 任务中,类其实是一种过度设计。
那我什么时候还会用类?
当然,我并不是说类就一无是处。
我只是反对不假思索地默认使用类。下面这些情况,我仍然会使用类:需要继承或多态时;开发图形界面或游戏(比如用 PyQt 或 Pygame);使用某些要求类结构的框架(如 Django 或 FastAPI)对象有频繁变化的状态+丰富的行为
但在日常绝大多数工作中——尤其是写函数、脚本或API——这类情况其实非常少见。
来看一个实际案例:告别类的改造过程
之前我写过一个脚本,负责根据 CI 事件发送 Slack 通知。
之前的写法(基于类):
改造后(基于函数):
新的版本更短、更容易测试,不用先实例化对象再调方法——一步到位。
最后一点想法
Python 提供了这么多灵活的工具,我们真的不必每次都硬套类。下次写代码前,不妨先问自己一句:这个功能真的必须用类来实现吗?如果答案是否定的,那就试试更简单的方式。以后的你(和你的同事)会感谢这个决定的。
扫码二维码 获取免费视频学习资料
- 本文固定链接: http://www.phpxs.com/post/13407/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料