迄今为止,你已经学会了如何使用函数来执行任务,以及使用循环和条件语句等控制结构来管理程序的执行流程,从而组织你的代码。这通常被称为过程式编程,其核心在于编写对数据进行操作的过程或函数。面向对象编程(OOP)提供了一种不同的视角。它侧重于思考程序所处理的“事物”或抽象。这些“事物”被称为对象。思考现实。现实中充满了各种对象:狗、汽车、银行账户、用户。每个对象都有两个主要特点:状态(数据): 对象是什么或拥有什么。一只狗有名字、品种和年龄。一个银行账户有账号和余额。这些通常被称为属性或特性。行为(动作): 对象可以做什么。一只狗可以吠叫、摇尾巴或吃东西。一个银行账户可以存款或取款。这些动作作为与对象关联的函数来实现,称为方法。“OOP 允许我们在代码中直接对这些对象进行建模。我们如何定义一个对象是什么以及它能做什么?我们使用类。”类充当创建对象的蓝图、模板或配方。它定义了某一特定类型的所有对象将共享的共同结构和行为。例如,我们可以定义一个 Dog 类。这个类的定义将指定我们在程序中创建的所有狗都将拥有 name 和 breed 等属性,以及 bark() 等方法。类本身不是一只狗;它是制作狗的方案。对象(也称为实例)是从类创建的一个具体实现。使用我们的 Dog 类(蓝图),我们可以创建独立的狗对象。我们可能会创建一个名为“Buddy”的狗对象,它是一只“金毛寻回犬”,以及另一个名为“Lucy”的狗对象,它是一只“贵宾犬”。Buddy 和 Lucy 都是从 Dog 类创建的对象。它们共享相同的属性集合(名字、品种)和方法(吠叫),但它们的属性值(它们各自的名字和品种)对于每个对象来说是独有的。digraph G { rankdir=LR; node [shape=box, style=filled, fillcolor="#e9ecef", fontname="Arial"]; edge [fontname="Arial"]; subgraph cluster_class { label = "类:狗 (蓝图)"; style=filled; fillcolor="#dee2e6"; class_node [label="属性:\n- 名字\n- 品种\n- 年龄\n\n方法:\n- 吠叫()\n- 摇尾巴()", shape=record, fillcolor="#ced4da"]; } subgraph cluster_objects { label = "对象 (实例)"; style=filled; fillcolor="#dee2e6"; object1 [label="对象:buddy\n名字:\"Buddy\"\n品种:\"金毛寻回犬\"\n年龄:3", shape=note, fillcolor="#a5d8ff"]; object2 [label="对象:lucy\n名字:\"Lucy\"\n品种:\"贵宾犬\"\n年龄:5", shape=note, fillcolor="#ffc9c9"]; } class_node -> object1 [label="创建"]; class_node -> object2 [label="创建"]; }类充当定义属性和方法的模板。对象是从该类创建的独立实例,每个实例可能拥有不同的属性值,但共享相同的结构和行为。这种将数据(属性)和对数据进行操作的函数(方法)捆绑在对象中的做法是面向对象编程中的一种基本思想。它通过将相关信息和功能归类,有助于组织代码,特别是在大型程序中。不再为狗的名字和品种设置独立的变量,也不再有独立的函数让任何狗吠叫,我们而是创建一个 Dog 对象,它拥有自己的名字和品种,并且知道如何自己吠叫。在接下来的部分中,你将学习定义类、从这些类创建对象以及使用它们的属性和方法的 Python 语法。这种面向对象的思维方式为组织程序提供了一个强大的工具。