当前位置:首页>python>Python 不用类编程,还能用什么

Python 不用类编程,还能用什么

  • 2026-08-27 05:51:01
Python 不用类编程,还能用什么
关注+星标,每天学习Python新技能

来源:网络

曾经我写 Python 代码几乎全是 class。但后来我发现,其实大多数时候,更简单的方式反而更高效。现在,我已经逐渐摆脱了“类强迫症”,也许你也该试试。

那时候我刚开始学编程,觉得写类很“高级”。书上也这么教,讲什么 __init__、继承、多态、封装,搞得好像不写类就不是“正经程序员”。

于是我写了很多这样的代码:

classUser:def__init__(self, name, email):self.name = nameself.email = email

没错,很标准的 OOP(面向对象编程)写法。

但随着项目变大,我发现事情变得不对劲了——这些 class 不仅没帮我更好地组织代码,反而让事情变复杂了。

类的问题在哪

总结一句话就是:太多形式主义,太少实际价值。

很多时候,我只是想完成一个简单的功能,但写类会让我花大量精力去写构造函数、维护状态、搞清楚逻辑到底藏在哪个方法里。而这些复杂结构往往没必要。

更重要的是,有些时候,这种“提前抽象”反而让代码更难读、更难测、更难维护。所以我开始用这些方式替代 class。

1. 一切从函数开始

如果一个功能不需要保留状态,那么它根本就不需要一个类。直接写函数就行了:

defsend_email(to, subject, body):# 简洁清晰pass

函数比类更直观,更容易测试,也更“Pythonic”。

2. 用 @dataclass 替代冗长的类

有时候,我确实需要一个“只存数据”的结构,这时候用 dataclass 就很完美:

from dataclasses import dataclass@dataclassclassUser:    name: str    email: str

你不用自己写 __init__ 和 __repr__,Python 会自动帮你生成,干净利落,非常适合做配置、数据传输对象(DTO)或者参数结构。

3. 直接用字典搞定轻量数据

有些场景连 dataclass 都嫌多,比如处理 JSON、API 返回值、配置文件……用字典就行:

user = {"name": "Alice","email": "alice@example.com"}

轻便灵活,适合快速开发。

4. 用模块本身代替单例类

如果你只是想要个全局工具或状态,写个模块就好了,没必要硬写个“单例类”。

# email_utils.pydefsend_email(to, subject, body):pass# 使用时import email_utilsemail_utils.send_email(...)

没有实例化,没有层层调用,一目了然。

为什么我反感“过早抽象”

提前把东西封装成类,看起来“有架构”,但:

  • • 测试麻烦(“我到底该 mock 类还是 mock 方法?”)
  • • 代码冗长
  • • Python 味道全没了

很多时候,我们只是在写脚本、数据处理、API 接口……用不着搞一堆复杂的 class。保持代码简洁、显式、易读,才是 Python 最强的地方。

不是不用类,而是别默认用类

我不是反对用 class,我是反对无脑用 class。

我仍然会在以下场景使用类:

  • • 需要继承或多态(比如构建插件系统)
  • • 写 GUI 或游戏程序(比如 PyQt、Pygame)
  • • 用 Django、FastAPI 这类必须用类的框架
  • • 对象需要维护复杂的状态和行为

但这些情况,在我日常工作中,其实很少见。

一段真实的重构

之前我写了个用于发送 Slack 消息的小工具,最初的版本是这样写的:

classSlackNotifier:def__init__(self, webhook_url):self.webhook_url = webhook_urldefsend(self, message):# 发送消息

后来我把它重构成函数形式:

defsend_slack_message(webhook_url, message):# 发送消息

新版本更短、更好测,也不用再费劲地创建类对象。

Python 是一门充满表达力的语言,不是每件事都需要 class。函数、模块、dataclass、dict……这些原生工具往往更轻便、更灵活。

如果你也在为项目结构发愁,不妨试着少写点 class,看看效果如何。

长按或扫描下方二维码,免费获取 Python公开课和大佬打包整理的几百G的学习资料,内容包含但不限于Python电子书、教程、项目接单、源码等等

推荐阅读

不仅是圆周率,Python 3.14 这一次要带我们突破性能的边界

为什么你的 Python 项目应该使用 Enum

详细比对15款Python编辑器,请择优选用!

Python 线程,进程,多线程,多进程以及并行执行for循环

点击 阅读原文 了解更多

最新文章

随机文章