在Python中,类是面向对象编程的核心载体,通过定义类可以将相关的属性和方法封装在一起,实现代码的复用和模块化。类可以看作是一类事物的抽象模板,而实例则是这个模板的具体实现。

Python类的基础定义语法
Python中定义类使用class关键字,基础语法格式如下:
class 类名:
# 类体部分,包含属性和方法
pass
类名通常遵循大驼峰命名法,也就是每个单词的首字母大写,不使用下划线连接。类体中可以定义类属性、实例属性、各种类型的方法。
类的核心组成部分
构造方法与实例属性
构造方法是类实例化时自动调用的特殊方法,在Python中构造方法名为__init__,它的第一个参数固定为self,代表实例本身。我们可以在构造方法中定义实例属性,实例属性是每个实例独有的属性。
class Student:
# 构造方法,初始化实例属性
def __init__(self, name, age):
self.name = name # 实例属性name
self.age = age # 实例属性age
# 实例化Student类
stu1 = Student("张三", 18)
print(stu1.name) # 输出:张三
print(stu1.age) # 输出:18
实例方法
实例方法是定义在类内部,第一个参数为self的方法,只能通过类的实例来调用,可以访问和修改实例的属性。
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
# 实例方法,打印学生信息
def show_info(self):
print(f"学生姓名:{self.name},年龄:{self.age}")
stu1 = Student("李四", 20)
stu1.show_info() # 输出:学生姓名:李四,年龄:20
类属性与类方法
类属性是定义在类内部、方法外部的属性,所有实例共享这个属性。类方法是使用@classmethod装饰器修饰的方法,第一个参数为cls,代表类本身,可以访问和修改类属性。
class Student:
# 类属性,统计学生总人数
total_count = 0
def __init__(self, name, age):
self.name = name
self.age = age
Student.total_count += 1 # 每实例化一个学生,总人数加1
# 类方法,获取学生总人数
@classmethod
def get_total_count(cls):
return cls.total_count
stu1 = Student("王五", 19)
stu2 = Student("赵六", 21)
print(Student.get_total_count()) # 输出:2
print(stu1.total_count) # 输出:2,实例可以访问类属性
静态方法
静态方法是使用@staticmethod装饰器修饰的方法,不需要默认的参数self或cls,相当于定义在类内部的普通函数,通常用于实现和类相关但不需要访问类属性或实例属性的功能。
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
# 静态方法,判断年龄是否合法
@staticmethod
def is_valid_age(age):
return 0 < age < 150
print(Student.is_valid_age(18)) # 输出:True
print(Student.is_valid_age(200)) # 输出:False
完整类定义示例
下面是一个包含类属性、实例属性、实例方法、类方法、静态方法的完整类定义示例:
class Student:
# 类属性
school = "XX中学"
def __init__(self, name, age, score):
# 实例属性
self.name = name
self.age = age
self.score = score
# 实例方法
def show_info(self):
print(f"姓名:{self.name},年龄:{self.age},分数:{self.score},学校:{self.school}")
# 类方法,修改学校名称
@classmethod
def set_school(cls, new_school):
cls.school = new_school
# 静态方法,判断分数是否及格
@staticmethod
def is_pass(score):
return score >= 60
# 测试代码
stu1 = Student("小明", 16, 85)
stu1.show_info() # 输出:姓名:小明,年龄:16,分数:85,学校:XX中学
print(Student.is_pass(stu1.score)) # 输出:True
Student.set_school("YY中学")
stu2 = Student("小红", 15, 55)
stu2.show_info() # 输出:姓名:小红,年龄:15,分数:55,学校:YY中学
print(Student.is_pass(stu2.score)) # 输出:False
注意事项
- 类定义完成后,需要实例化才能使用实例的属性和方法,不能直接通过类调用实例方法。
self和cls只是约定俗成的参数名,也可以换成其他名称,但建议使用标准命名方便代码阅读。- 实例属性是每个实例独有的,修改一个实例的实例属性不会影响其他实例;类属性是所有实例共享的,修改类属性会影响所有实例。