一、核心概念:类与对象
1. 基本定义
- 类(Class) :抽象的 “模板”,描述一类事物的共同特征(属性)和行为(方法)。
- 对象(Object/Instance) :类的具体实例,是内存中实际存在的实体。
2. 类的定义与实例化
class Student:
"""学生类,描述学生的基本信息和行为"""
def __init__(self, name, age):
self.name = name
self.age = age
def introduce(self):
print(f"我是{self.name},今年{self.age}岁")
stu1 = Student("张三", 18)
stu2 = Student("李四", 19)
stu1.introduce()
stu2.introduce()
print(stu1.name)
二、属性:实例属性 vs 类属性
1. 实例属性
- 定义:在
__init__ 中通过 self.属性名 定义,每个实例独立拥有。
- 特点:修改一个实例的属性,不影响其他实例。
2. 类属性
- 定义:直接在类内部、所有方法外部定义,属于类本身,所有实例共享。
- 特点:修改类属性会影响所有实例(通过实例修改类属性会创建同名实例属性,需注意)。
class Student:
school = "北京大学"
def __init__(self, name, age):
self.name = name
self.age = age
print(Student.school)
stu1 = Student("张三", 18)
print(stu1.school)
Student.school = "清华大学"
print(stu1.school)
stu1.school = "复旦大学"
print(stu1.school)
print(Student.school)
三、方法:实例方法 / 类方法 / 静态方法
1. 实例方法
- 定义:第一个参数为
self,绑定实例,可访问 / 修改实例属性和类属性。
- 调用:通过实例调用(
实例.方法名()),self 由解释器自动传递。
2. 类方法
- 定义:用
@classmethod 装饰,第一个参数为 cls(指代当前类),绑定类。
- 作用:操作类属性,不依赖实例,可作为 “工厂方法” 创建实例。
- 调用:类 / 实例均可调用。
3. 静态方法
- 定义:用
@staticmethod 装饰,无默认参数(self/cls),与类 / 实例无关。
- 作用:工具函数,逻辑上属于类但不依赖类 / 实例属性。
- 调用:类 / 实例均可调用。
class MathUtils:
PI = 3.1415926
def __init__(self, radius):
self.radius = radius
def circle_area(self):
return self.PI * self.radius **2
@classmethod
def update_pi(cls, new_pi):
cls.PI = new_pi
print(f"PI已更新为:{cls.PI}")
@staticmethod
def add(a, b):
return a + b
math1 = MathUtils(5)
print(math1.circle_area())
MathUtils.update_pi(3.14)
print(math1.circle_area())
print(MathUtils.add(2, 3))
print(math1.add(4, 5))