类方法、实例方法和静态方法
类方法、实例方法和静态方法的区别。
创建一个 Student 类,用于管理学生的信息和计算成绩相关的数据。
class Student:
# 类属性,记录学生的总数
total_students = 0
def __init__(self, name, score):
# 实例属性,学生的姓名
self.name = name
# 实例属性,学生的成绩
self.score = score
# 每创建一个学生实例,学生总数加 1
Student.total_students += 1
# 实例方法:用于获取学生的个人信息
def get_info(self):
return f"学生姓名: {self.name}, 成绩: {self.score}"
# 类方法:用于获取学生的总数
@classmethod
def get_total_students(cls):
return cls.total_students
# 静态方法:用于计算平均成绩
@staticmethod
def calculate_average(scores):
if not scores:
return 0
return sum(scores) / len(scores)
# 创建学生实例
student1 = Student("Alice", 85)
student2 = Student("Bob", 90)
# 调用实例方法
print(student1.get_info())
# 输出:学生姓名: Alice, 成绩: 85
# 调用类方法
print(Student.get_total_students())
# 输出:2
# 调用静态方法
scores = [student1.score, student2.score]
print(Student.calculate_average(scores))
# 输出:87.5
区别分析
1. 实例方法
- 定义特点:在类中定义的普通方法,第一个参数通常是
self,self代表类的实例对象。 - 访问权限:可以访问和修改实例属性以及类属性。在上述例子中,
get_info方法通过self.name和self.score访问了实例的属性。 - 调用方式:必须通过类的实例来调用。例如,
student1.get_info()是通过student1这个实例来调用get_info方法的。
2. 类方法
- 定义特点:使用
@classmethod装饰器进行修饰,第一个参数通常是cls,cls代表类本身。 - 访问权限:可以访问和修改类属性,但不能直接访问实例属性。在上述例子中,
get_total_students方法通过cls.total_students访问了类属性。 - 调用方式:既可以通过类名调用,也可以通过实例调用。例如,
Student.get_total_students()是通过类名调用的,也可以使用student1.get_total_students()这种实例调用的方式。
3. 静态方法
- 定义特点:使用
@staticmethod装饰器进行修饰,没有类似self或cls这样的特殊参数。 - 访问权限:不能直接访问类属性和实例属性,它就像一个独立的函数,只是逻辑上与类相关。在上述例子中,
calculate_average方法只接收传入的成绩列表进行计算,不依赖于类或实例的属性。 - 调用方式:既可以通过类名调用,也可以通过实例调用。例如,
Student.calculate_average(scores)是通过类名调用的,也可以使用student1.calculate_average(scores)这种实例调用的方式。

浙公网安备 33010602011771号