共计 1349 个字符,预计需要花费 4 分钟才能阅读完成。
欢迎来到 Python 学习第 34 天!今天我们将深入了解 Python 中的 类方法(@classmethod) 和 静态方法(@staticmethod),它们虽然看起来类似,但在实际编程中有着不同的用途和场景。
一、三种方法的对比
在 Python 的类中,我们可以定义三种方法:
| 方法类型 | 第一个参数 | 用途 |
|---|---|---|
| 实例方法 | self |
访问或修改对象属性 |
| 类方法 | cls |
访问或修改类属性 |
| 静态方法 | 无特定参数 | 逻辑上属于类,但不操作类或实例的数据 |
二、类方法 @classmethod
类方法的特点是它的第一个参数是 cls,代表类本身,而不是某个实例。
示例:
class Dog:
count = 0
def __init__(self, name):
self.name = name
Dog.count += 1
@classmethod
def how_many_dogs(cls):
return f"当前共有 {cls.count} 条狗狗 🐶"
用法:
dog1 = Dog("小黑")
dog2 = Dog("小黄")
print(Dog.how_many_dogs()) # 当前共有 2 条狗狗 🐶
📌 使用场景:
- 访问 / 修改类变量
- 构建辅助构造器,例如从字符串、字典等创建实例
三、静态方法 @staticmethod
静态方法不需要 self 或 cls 参数,它完全是一个属于类的“工具函数”。
示例:
class MathTools:
@staticmethod
def add(a, b):
return a + b
用法:
result = MathTools.add(3, 5)
print(result) # 8
📌 使用场景:
- 逻辑上和类有关,但不需要访问类或实例数据
- 类似于工具类的用途(如数学计算、日期处理)
四、三者对比实战
class Student:
school = "Python 学院"
def __init__(self, name):
self.name = name
def introduce(self):
return f"我是 {self.name},来自 {self.school}"
@classmethod
def change_school(cls, new_school):
cls.school = new_school
@staticmethod
def welcome():
return "欢迎加入 Python 学院!"
使用示例:
s1 = Student("小明")
print(s1.introduce()) # 我是 小明,来自 Python 学院
Student.change_school("AI 编程学院")
print(s1.introduce()) # 我是 小明,来自 AI 编程学院
print(Student.welcome()) # 欢迎加入 Python 学院!
五、小结与今日练习
✅ 今日小结:
@classmethod操作类本身,用cls参数;@staticmethod是“与类相关”的独立工具函数;- 实例方法、类方法和静态方法在功能、使用时机和访问权限上各有不同。
📝 今日练习:
- 编写一个
Book类,统计创建了多少本书,并实现一个类方法返回当前总数。 - 创建一个
Converter类,使用静态方法实现摄氏度与华氏度的转换。 - 拓展一个
User类,添加类方法用于从用户名字符串批量创建用户实例。
📢 下一节预告(Day35):我们将探索 Python 中的 模块与包 ,学习如何组织代码结构、导入模块、构建自己的库!
正文完