在 Python 里,可以把“类”想成模具,把“实例”想成用模具做出来的具体物品。
比如:
1 | class Cat: |
实例方法
实例方法的第一个参数通常是 self。
1 | def eat(self): |
这里的 self 代表某一个具体对象。
1 | cat1 = Cat() |
可以理解成:
“让这只具体的猫去做某件事。”
实例方法最适合操作实例自己的数据:
1 | class Cat: |
1 | cat1 = Cat("小黑") |
因为每只猫的名字不同,所以要通过 self 找到当前这只猫。
类方法
类方法需要加 @classmethod,第一个参数通常是 cls。
1 |
|
cls 代表的是整个类,而不是某个具体对象。
1 | Cat.show_species() |
可以理解成:
“让 Cat 这个模具本身去做某件事。”
类方法一般用来:
- 操作类属性
- 创建实例
- 编写和整个类相关的逻辑
例如统计创建了多少只猫:
1 | class Cat: |
1 | cat1 = Cat("小黑") |
最通俗的区别
实例方法关心的是:
“这一只对象怎么样?”
类方法关心的是:
“这一类对象整体怎么样?”
| 对比 | 实例方法 | 类方法 |
|---|---|---|
| 第一个参数 | self |
cls |
| 代表什么 | 某个具体实例 | 类本身 |
| 装饰器 | 不需要 | @classmethod |
| 常见用途 | 操作实例属性 | 操作类属性、创建实例 |
| 常见调用方式 | 对象.方法() |
类.方法() |
再记一个小口诀:
self管“这一只”,cls管“这一类”。
顺便提醒一下:虽然类方法也能通过实例调用,比如 cat1.show_count(),但一般还是写成 Cat.show_count() 更清楚,不然代码看起来会有点“猫猫行为迷惑术”。