
1. 引言Python 是一门支持多种编程范式的语言其中面向对象编程Object-Oriented Programming, OOP是其核心特性之一。理解 OOP 对于编写结构清晰、可复用、易维护的代码至关重要。本文将带你从基础的函数出发逐步深入到类与对象的概念并通过实例演示如何在 Python 中运用它们。2. 函数面向过程的基础在接触类之前我们先回顾一下函数。函数是一段可重复使用的代码块用于执行特定任务。2.1 定义与调用函数# 定义一个简单的函数defgreet(name):向指定的人打招呼returnfHello,{name}!# 调用函数messagegreet(Alice)print(message)# 输出: Hello, Alice!2.2 函数的优势代码复用避免重复编写相同逻辑。模块化将复杂问题分解为小任务。提高可读性有意义的函数名使代码意图更清晰。然而当程序变得复杂需要管理大量相关联的数据和行为时仅仅使用函数会显得力不从心。这时我们就需要更强大的工具——类。3. 类与对象面向对象的核心3.1 什么是类与对象类Class是创建对象的蓝图或模板。它定义了对象将拥有的属性数据和方法函数。对象Object是类的一个具体实例拥有类中定义的属性和方法。例如“汽车”是一个类它定义了所有汽车都具有的属性颜色、品牌和方法启动、行驶。而“一辆红色的特斯拉 Model 3”就是“汽车”类的一个具体对象。3.2 定义第一个类# 定义一个简单的 Dog 类classDog:# 初始化方法 (构造函数)def__init__(self,name,age):# 实例属性self.namename self.ageage# 实例方法defbark(self):returnf{self.name}says: Woof!defget_info(self):returnf{self.name}is{self.age}years old.# 创建类的实例对象my_dogDog(Buddy,3)# 访问属性和调用方法print(my_dog.name)# 输出: Buddyprint(my_dog.bark())# 输出: Buddy says: Woof!print(my_dog.get_info())# 输出: Buddy is 3 years old.代码解析class Dog:使用class关键字定义类。__init__(self, ...)这是一个特殊方法称为构造方法。当创建新对象时自动调用用于初始化对象的属性。self参数代表实例本身。self.name和self.age这些是实例属性每个Dog对象都有自己的name和age。bark(self)和get_info(self)这些是实例方法是定义在类内部的函数用于描述对象的行为。所有实例方法的第一个参数都是self。4. 类的三大特性面向对象编程有三大核心特性封装、继承和多态。4.1 封装Encapsulation将数据属性和操作数据的方法捆绑在一起并对外部隐藏内部实现细节。classBankAccount:def__init__(self,owner,balance0):self.ownerowner self.__balancebalance# 私有属性以双下划线开头defdeposit(self,amount):ifamount0:self.__balanceamountreturnf成功存入{amount}。当前余额:{self.__balance}return存款金额必须大于0defwithdraw(self,amount):if0amountself.__balance:self.__balance-amountreturnf成功取出{amount}。当前余额:{self.__balance}return取款失败余额不足或金额无效defget_balance(self):returnself.__balance# 使用accountBankAccount(张三,1000)print(account.deposit(500))# 成功存入 500。当前余额: 1500# print(account.__balance) # 错误无法直接访问私有属性print(account.get_balance())# 正确通过公有方法访问输出: 15004.2 继承Inheritance允许一个类子类继承另一个类父类的属性和方法并可以扩展或重写它们。# 父类classAnimal:def__init__(self,name):self.namenamedefspeak(self):returnSome sound# 子类classCat(Animal):# Cat 继承自 Animaldefspeak(self):# 重写父类方法returnf{self.name}says: Meow!classDog(Animal):defspeak(self):returnf{self.name}says: Woof!# 使用animals[Cat(Kitty),Dog(Buddy)]foranimalinanimals:print(animal.speak())# 输出:# Kitty says: Meow!# Buddy says: Woof!4.3 多态Polymorphism指同一个接口方法名在不同类的对象上表现出不同的行为。上面的speak方法就是多态的体现。5. 类属性与类方法除了实例属性和方法类本身也可以拥有属性和方法。classStudent:# 类属性所有实例共享school阳光小学total_students0def__init__(self,name):self.namename Student.total_students1# 修改类属性# 实例方法defintroduce(self):returnf我叫{self.name}来自{Student.school}。# 类方法 (使用 classmethod 装饰器)classmethoddefget_total(cls):returnf学校共有{cls.total_students}名学生。# 静态方法 (与类和实例无关的工具函数)staticmethoddefwelcome():return欢迎来到学生管理系统# 使用s1Student(小明)s2Student(小红)print(s1.introduce())# 我叫小明来自阳光小学。print(Student.get_total())# 学校共有 2 名学生。print(Student.welcome())# 欢迎来到学生管理系统6. 函数 vs. 类如何选择特性函数 (Function)类 (Class)核心思想过程化关注“做什么”对象化关注“是什么”以及“能做什么”数据组织数据通过参数传递是临时的、分离的。数据属性和行为方法被捆绑在对象中状态持久。适用场景单一、独立的任务工具函数脚本。需要模拟现实实体管理复杂状态构建大型、可扩展的系统。代码复用通过调用实现逻辑复用。通过继承实现代码复用和扩展。状态管理困难通常依赖全局变量或返回值传递。简单状态保存在对象属性中。简单建议如果你的代码主要是处理数据转换、计算或者任务非常独立使用函数。如果你需要创建多个具有相同属性和行为的“东西”或者需要模拟一个具有状态和行为的实体使用类。7. 总结从函数到类是编程思维的一次重要提升。函数教你如何一步步完成任务而类教你如何设计和组织你的代码世界。掌握 Python 的面向对象编程你将能够构建更清晰、更模块化的程序结构。更好地封装数据提高代码安全性。利用继承和多态写出更灵活、可扩展的代码。为学习更高级的框架如 Django, PyTorch打下坚实基础。建议从模仿本文的简单例子开始尝试为你关心的领域如“图书”、“游戏角色”、“订单”设计类并动手实现它们。实践是掌握面向对象编程的最佳途径。