面向对象初探:Python类与对象的简单理解

什么是面向对象编程?

想象一下,你想做一个简单的游戏,比如“打气球”。传统的编程思路可能是先写“检测气球是否被点击”,再写“气球移动”,再写“计分”……这些代码散落在不同的地方,就像一堆零散的零件。但如果用面向对象的思路,你会把“气球”本身看作一个独立的“角色”——它有自己的颜色、大小(这些是“属性”),还有“移动”“被点击则消失”(这些是“行为”)。这样把数据和行为封装在一个“对象”里,是不是更像我们现实中观察世界的方式?

面向对象编程(OOP,Object-Oriented Programming)就是以“对象”为核心,把问题拆解成一个个对象,每个对象负责自己的属性和行为。Python 是一门支持面向对象的语言,理解类和对象是进入 Python 面向对象世界的第一步。

Python中的“类”是什么?

“类”(Class)就像一张“设计图”或“模板”,用来描述对象的共同特征和行为。比如“动物”是一个类,它包含所有动物的共同属性(比如有生命、会呼吸)和行为(比如跑、叫);而具体的“猫”“狗”就是这个类的一个个“对象”(实例)。

在 Python 中,我们用 class 关键字定义一个类。比如定义一个“汽车”类:

class Car:
    # 这里将定义汽车的属性和方法
    pass  # pass 表示暂时没有内容,先占位

这个 Car 类现在是空的,我们需要给它加上“属性”和“方法”。

类的组成:属性与方法

属性:对象的“特征”,就像汽车有颜色、品牌、速度等特征,在 Python 中表现为类中的变量。
方法:对象的“行为”,就像汽车可以“行驶”“加油”,在 Python 中表现为类中的函数(注意:类中的函数叫“方法”,不是普通函数)。

1. 定义属性

我们给 Car 类加上一些属性,比如 color(颜色)、speed(速度)。为了让每个对象的属性能独立初始化,我们需要用 构造方法 __init__(这是 Python 的特殊方法,会在创建对象时自动调用)。

class Car:
    # 构造方法:初始化对象的属性
    def __init__(self, color, brand):
        # self 是一个特殊参数,代表对象本身(比如当前这辆车)
        self.color = color  # 实例属性:颜色
        self.brand = brand  # 实例属性:品牌
        self.speed = 0      # 初始速度为0
  • __init__ 方法的第一个参数必须是 self,它指向当前对象,就像“这辆车自己”。
  • 当我们创建对象时,__init__ 会自动运行,传入的参数(如 colorbrand)会被赋值给 self 的属性。
2. 定义方法

Car 类加上“行为”,比如 drive(行驶)和 stop(停止):

class Car:
    def __init__(self, color, brand):
        self.color = color
        self.brand = brand
        self.speed = 0

    # 行驶方法:加速
    def drive(self, speed_increase):
        self.speed += speed_increase
        print(f"{self.brand}{self.color}汽车正在加速,当前速度:{self.speed}")

    # 停止方法:减速到0
    def stop(self):
        self.speed = 0
        print(f"{self.brand}{self.color}汽车已停止,速度:{self.speed}")

这里的 drivestop 就是 Car 类的“方法”,每个对象(实例)都可以调用这些方法。

从类到对象:实例化

有了类之后,我们需要创建具体的对象(实例化),就像根据“汽车设计图”造出一辆辆具体的汽车。

# 创建对象:调用类名(),并传入构造方法需要的参数
my_car = Car("红色", "特斯拉")  # 实例化一个 Car 对象,颜色红色,品牌特斯拉

# 访问属性:通过对象.属性名
print(my_car.color)  # 输出:红色
print(my_car.brand)  # 输出:特斯拉

# 调用方法:通过对象.方法名()
my_car.drive(50)  # 输出:特斯拉的红色汽车正在加速,当前速度:50
my_car.drive(30)  # 输出:特斯拉的红色汽车正在加速,当前速度:80
my_car.stop()     # 输出:特斯拉的红色汽车已停止,速度:0

关键点:每个对象(如 my_car)都有自己独立的属性值,修改一个对象的属性不会影响其他对象。

为什么需要 self

self 是 Python 中一个“约定俗成”的参数,它的作用是让方法知道“操作的是哪个对象”。比如 my_car.drive(50) 中,self 会自动指向 my_car,所以 self.speed 就是 my_carspeed 属性。如果没有 self,方法就无法区分是哪个对象的属性,会报错。

小练习:定义一个“学生”类

尝试自己写一个简单的 Student 类,包含:
- 属性:name(姓名)、age(年龄)、score(分数)
- 方法:study()(学习,分数+10)、introduce()(自我介绍,打印姓名、年龄、分数)

class Student:
    def __init__(self, name, age, score=0):  # score 默认值为0
        self.name = name
        self.age = age
        self.score = score

    def study(self):
        self.score += 10
        print(f"{self.name} 学习后,分数变为:{self.score}")

    def introduce(self):
        print(f"我叫{self.name},今年{self.age}岁,分数是{self.score}分")

# 创建学生对象
student1 = Student("小明", 15, 80)
student1.introduce()  # 输出:我叫小明,今年15岁,分数是80分
student1.study()      # 输出:小明 学习后,分数变为:90
student1.introduce()  # 输出:我叫小明,今年15岁,分数是90分

总结

  • 类(Class) 是对象的模板,定义了对象的属性和方法。
  • 对象(Object) 是类的实例,是具体的“东西”,有自己的属性值。
  • 属性 是对象的特征(变量),方法 是对象的行为(函数)。
  • __init__ 是构造方法,用于初始化对象属性;self 指向当前对象,是方法的第一个参数。

面向对象编程的核心思想是“封装”,即把数据和操作数据的方法放在一起,让代码更模块化、易维护。后续我们会学习更复杂的概念(如继承、多态),但先打好类与对象的基础吧!

Xiaoye