Python 类和面向对象怎么入门:什么时候该写 class,什么时候不用
用脚本和小项目场景讲清 Python 类、对象、实例属性、类方法和静态方法,帮助新手判断什么时候需要面向对象。
相关工具
不是所有脚本都需要 class
Python 很灵活,简单脚本用函数就能写得很好。比如批量重命名、清洗文本、转换 CSV,函数拆分已经够用。类更适合处理“有状态、有行为、会被反复使用”的对象。比如一个 API 客户端要保存 base_url、token、超时时间,并提供 get、post 方法,这时写成类会更自然。
不要为了显得高级强行写 class。判断是否需要类,可以问三个问题:有没有一组数据需要长期保存?有没有多个函数都围绕这组数据操作?以后会不会创建多个类似对象?如果答案大多是 yes,就可以考虑类。
一个简单类:
class Article:
def __init__(self, title, slug):
self.title = title
self.slug = slug
def url(self):
return f"/guides/{self.slug}"
article = Article("Python 类入门", "python-class")
print(article.url())__init__ 负责初始化对象
__init__ 是对象创建时自动调用的方法,常用来保存实例属性。self 表示当前对象。很多新手会觉得 self 奇怪,可以先把它理解成“这个对象自己”。不同对象有不同的 self,所以它们的属性互不影响。
示例:
class ApiClient:
def __init__(self, base_url, token):
self.base_url = base_url.rstrip("/")
self.token = token
def headers(self):
return {"Authorization": f"Bearer {self.token}"}
client = ApiClient("https://api.example.com", "TOKEN")
print(client.headers())如果一个函数每次调用都要传 base_url、token、timeout,把这些放进对象里会更省心。后续方法可以直接使用 self.base_url 和 self.token。
类方法和静态方法不要急着用
新手刚学类时,先把普通实例方法用熟就够了。@classmethod 和 @staticmethod 有用,但不是入门第一优先级。类方法常用于替代构造方式,静态方法常用于放在类命名空间里的工具函数,但它们都不应该滥用。
类方法示例:
class User:
def __init__(self, name, city):
self.name = name
self.city = city
@classmethod
def from_dict(cls, data):
return cls(data["name"], data["city"])
user = User.from_dict({"name": "张三", "city": "杭州"})
print(user.name)如果你只是写几个独立工具函数,放在模块里就行,不一定要塞进类。类应该让代码更清楚,而不是更绕。
面向对象适合小项目组织代码
当脚本慢慢变大,类可以帮你把相关数据和行为放在一起。比如文章采集器、图片处理器、接口客户端、报表生成器,都可以写成类。类的好处是入口清楚,状态集中,方法之间共享配置更方便。
但类也会增加理解成本。一个项目里如果全是继承、重写、魔法方法,新手很难维护。实用做法是:先用函数写通流程,发现有一组配置和方法总是一起出现,再抽成类。这样类是长出来的,不是硬套出来的。
做教程站内容管理时,可以先用字典保存文章数据;等后面需要校验、生成 URL、导出结构化数据,再考虑 Article 类。不要过早抽象。
常见问题
Python 入门必须先学面向对象吗?
不必。先把变量、函数、列表、字典、文件处理用熟,再学类会更顺。
什么时候适合写 class?
当一组数据和多个操作总是一起出现,并且会被反复使用时,适合写 class。
staticmethod 常用吗?
有用但不必滥用。很多静态方法其实放成普通函数更清楚。