面向对象编程(OOP)是 Python 的核心范式之一,而“类”和“实例”是理解 OOP 的起点。简单来说:类是一个蓝图或模板,实例是根据这个蓝图创建出来的具体对象。你可以把类想象成“汽车设计图纸”,实例就是根据图纸制造出来的每一辆真实汽车。图纸描述了汽车有什么属性(颜色、品牌、速度)和行为(加速、刹车),而每辆车都有自己的具体状态。
类的基本定义
在 Python 中,使用 class 关键字定义一个类。类名通常采用大驼峰命名法(如 Car、UserAccount)。
class Car:
# 类属性(所有实例共享)
category = "vehicle"
# 构造函数(初始化实例属性)
def __init__(self, brand, color):
self.brand = brand # 实例属性
self.color = color # 实例属性
self.speed = 0 # 实例属性(默认值)
# 实例方法
def accelerate(self, increment):
self.speed += increment
print(f"当前速度:{self.speed} km/h")
构造函数 init
init 是 Python 类的构造函数,在实例化对象时自动调用。它的核心职责是给实例绑定初始属性。注意:
- 第一个参数必须为
self,指向当前正在创建的实例本身。 - 通过
self.属性名定义的变量,就是实例属性,每个实例独立保存一份。 init中可以设置默认参数,让对象创建更灵活。
实例化过程
当你执行 my_car = Car("Toyota", "white") 时,背后发生了两件事:
Car.new(cls)创建出一个空的实例对象。Car.init(self, "Toyota", "white")被调用,把属性绑定到这个实例上。
最终 my_car 变量指向的就是这个已初始化的实例。你可以创建多个互不影响的实例:
car1 = Car("Toyota", "white")
car2 = Car("Honda", "blue")
car1.accelerate(30) # 输出:当前速度:30 km/h
car2.accelerate(50) # 输出:当前速度:50 km/h
实例属性与类属性
- 实例属性:通过
self.xxx定义,每个实例独立拥有。比如car1.brand和car2.brand是不同的值。 - 类属性:直接定义在类体内,所有实例共享。比如
category,可通过Car.category或car1.category访问。但是,如果通过实例对类属性进行赋值(如car1.category = "truck"),实际上会在该实例的dict中创建一个同名的实例属性,而不会修改类属性。要批量修改类属性,应通过Car.category = "new_value"进行操作。
实例方法
类中定义的函数(第一个参数为 self)称为实例方法。调用时 self 自动传入,因此可通过 self 访问当前实例的属性和其他方法。方法内部修改的属性都是当前实例的,不会影响其他实例。
总结要点
- 类:模板,定义了对象有什么属性、什么行为。
- 实例:根据类创建的具体对象,拥有独立的状态。
init:初始化实例属性的地方,实例化时自动执行。self:在类内部代指当前实例,是连接方法与实例的桥梁。- 类属性 vs 实例属性:前者共享,后者独立;注意修改时的陷阱。
掌握这些基础后,你就可以开始用类来封装数据和行为,构建结构清晰、可复用的代码模块。接下来的章节会深入探讨封装、继承、多态,以及更多面向对象的高级特性。