定义一个简单对象

PythonPythonBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何定义一个简单的 Python 类来表示股票信息。类是面向对象编程中的一个关键概念,它能让你对现实世界的实体进行建模,并更高效地组织你的代码。

本实验的目标包括学习定义一个简单的 Python 类、理解类属性和方法、创建类实例并与之交互,以及应用格式化来显示对象信息。在这个实验过程中,你将创建 stock.py 文件。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/ObjectOrientedProgrammingGroup(["Object-Oriented Programming"]) python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python/BasicConceptsGroup -.-> python/strings("Strings") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/ObjectOrientedProgrammingGroup -.-> python/classes_objects("Classes and Objects") python/ObjectOrientedProgrammingGroup -.-> python/constructor("Constructor") python/ObjectOrientedProgrammingGroup -.-> python/encapsulation("Encapsulation") subgraph Lab Skills python/strings -.-> lab-132394{{"定义一个简单对象"}} python/function_definition -.-> lab-132394{{"定义一个简单对象"}} python/classes_objects -.-> lab-132394{{"定义一个简单对象"}} python/constructor -.-> lab-132394{{"定义一个简单对象"}} python/encapsulation -.-> lab-132394{{"定义一个简单对象"}} end

理解 Python 类

在 Python 中,类是创建对象的蓝图。面向对象编程是一种强大的编程方式,它能让我们有效地组织代码。具体做法是将相关的数据和函数组合在一起,这样我们就能更轻松地管理复杂的程序,使代码更具模块化和可维护性。

Python 类主要由两个部分组成:

  • 属性(Attributes):这些是存储在类中的变量。可以把属性看作是对象的特征或特性。例如,如果我们要创建一个表示人的类,属性可以是人的姓名、年龄和身高。
  • 方法(Methods):这些是属于类的函数,它们可以访问或修改类的属性。方法定义了对象可以执行的操作。以人的类为例,一个方法可以是一个计算人年龄(以月为单位)的函数。

类非常有用,因为它们提供了一种创建可复用代码和对现实世界概念进行建模的方式。在这个实验中,我们将创建一个 Stock 类,该类将用于表示股票信息,如股票名称、股数和每股价格。

以下是 Python 类的基本结构:

class ClassName:
    def __init__(self, parameter1, parameter2):
        self.attribute1 = parameter1
        self.attribute2 = parameter2

    def method_name(self):
        ## Code that uses the attributes
        return result

__init__ 方法是 Python 类中的一个特殊方法。当我们从类中创建一个新对象时,它会自动被调用。这个方法用于初始化对象的属性。self 参数是对类实例的引用,用于从类内部访问属性和方法。当我们在对象上调用方法时,Python 会自动将对象本身作为第一个参数传递,这就是为什么我们在方法定义中使用 self 的原因。这样我们就可以处理特定实例的属性并对其执行操作。

✨ 查看解决方案并练习

创建 Stock 类

在 Python 中,类是创建对象的蓝图,它能让你将数据和功能捆绑在一起。现在,让我们创建 Stock 类来表示股票信息。股票有一些特定的特征,比如股票名称、股数和每股价格。我们将在类中为这些方面定义属性。

  1. 首先,你需要在 WebIDE 中进入正确的目录。如果你还不在 /home/labex/project 目录下,请导航到该目录。我们将在这个目录下编写 Stock 类的代码。

  2. 进入正确的目录后,在编辑器中创建一个新文件,将其命名为 stock.py。这个文件将包含我们的 Stock 类代码。

  3. 现在,让我们添加代码来定义 Stock 类。将以下代码复制并粘贴到 stock.py 文件中:

class Stock:
    def __init__(self, name, shares, price):
        self.name = name
        self.shares = shares
        self.price = price

    def cost(self):
        return self.shares * self.price

在这段代码中:

  • class Stock: 语句创建了一个名为 Stock 的新类,这就像是创建股票对象的模板。
  • __init__ 方法是 Python 类中的一个特殊方法,也称为构造函数。当你创建 Stock 类的新对象时,__init__ 方法会自动运行。它接受三个参数:namesharesprice,这些参数代表了股票的相关信息。
  • __init__ 方法内部,我们使用 self 来引用类的实例。我们将参数的值存储为实例属性。例如,self.name = namename 参数存储为对象的一个属性。
  • cost() 方法是我们定义的一个自定义方法,它通过将股数 (self.shares) 乘以每股价格 (self.price) 来计算股票的总成本。
  1. 添加代码后,保存文件。你可以通过按 Ctrl+S 或点击保存图标来完成保存操作。保存文件可确保你的更改被保留。

让我们再次检查代码,确保我们理解了它:

  • 我们定义了一个名为 Stock 的类,该类将用于创建股票对象。
  • __init__ 方法接受三个参数:namesharesprice,并使用这些值初始化对象的属性。
  • __init__ 内部,我们使用 self 将这些参数存储为实例属性,这样每个对象都可以有自己的属性值。
  • 我们添加了一个 cost() 方法,通过股数乘以价格来计算总成本,这对我们的股票对象来说是一个实用的功能。

当我们创建 Stock 对象时,__init__ 方法会自动运行,使用我们提供的值设置对象的初始状态。这样,我们就可以轻松地创建具有不同名称、股数和价格的多个股票对象。

✨ 查看解决方案并练习

创建股票对象

既然我们已经定义了 Stock 类,现在是时候让它发挥作用了。创建类的实例就像是根据通用蓝图制作具体的示例。在这种情况下,Stock 类就是我们的蓝图,我们将创建一些股票对象。创建这些对象后,我们将学习如何访问它们的属性(特征)和方法(它们可以执行的操作)。

  1. 首先,我们需要在 WebIDE 中打开一个终端。终端就像是一个命令中心,我们可以在其中向计算机发出指令。要打开它,请点击菜单中的“Terminal”。

  2. 终端打开后,我们需要确保自己处于正确的项目目录中。项目目录是存储项目所有相关文件的地方。如果你还不在项目目录中,请使用以下命令导航到该目录:

cd /home/labex/project
  1. 现在,我们要以交互模式启动 Python 并加载我们的 stock.py 文件。交互模式允许我们逐步测试代码并立即看到结果。stock.py 文件包含了我们 Stock 类的定义。使用以下命令:
python3 -i stock.py

这里的 -i 标志很重要。它告诉 Python 先运行 stock.py 脚本。运行脚本后,它会启动一个交互会话。在这个会话中,我们可以访问 stock.py 脚本中定义的任何类和变量。

  1. 让我们为谷歌(Google)股票创建一个新的 Stock 对象。创建对象就像是使用特定的值创建 Stock 类的一个具体实例。使用以下代码:
s = Stock('GOOG', 100, 490.10)

这行代码创建了 Stock 类的一个新实例。以下是每个值的含义:

  • 名称:'GOOG' — 这是谷歌股票的代码。
  • 股数:100 — 它表示我们持有的谷歌股票的数量。
  • 价格:490.10 — 这是谷歌股票的每股价格。
  1. 现在我们有了 Stock 对象,就可以访问它的属性了。属性就像是对象的特性。要访问属性,我们使用对象的名称,后面跟着一个点和属性名称。
s.name

当你运行这段代码时,它将输出股票的名称:

'GOOG'

让我们访问股数:

s.shares

输出将是我们定义的股数:

100

最后,让我们访问每股价格:

s.price

输出将是每股价格:

490.1
  1. 我们的 Stock 类有一个名为 cost() 的方法。方法就像是对象可以执行的操作。在这种情况下,cost() 方法计算我们持有的股票的总成本。要调用这个方法,请使用以下代码:
s.cost()

输出将是总成本:

49010.0

cost() 方法通过将股数(100)乘以每股价格(490.10)来计算总成本,结果为 49010.0。

✨ 查看解决方案并练习

处理多个股票对象

在面向对象编程中,类就像是一个蓝图,而该类的实例则是基于这个蓝图创建的实际对象。我们的 Stock 类是用于表示股票的蓝图。我们可以创建这个 Stock 类的多个实例来表示不同的股票。每个实例都有自己的一组属性,例如股票名称、股数和每股价格。

  1. 在 Python 交互会话仍在运行的情况下,我们将创建另一个 Stock 对象。这次,它将代表 IBM 公司的股票。要创建 Stock 类的一个实例,我们像调用函数一样调用类名,并传入必要的参数。这里的参数是股票名称、股数和每股价格。
t = Stock('IBM', 50, 91.5)

在这行代码中,我们正在创建一个名为 t 的新 Stock 对象,它代表 IBM 公司的股票。该股票有 50 股,每股价格为 91.5 美元。

  1. 现在,我们要计算这只新股票的成本。Stock 类有一个名为 cost() 的方法,它通过将股数乘以每股价格来计算股票的总成本。
t.cost()

当你运行这段代码时,Python 将在 t 对象上调用 cost() 方法,并返回总成本。

输出:

4575.0
  1. 我们可以使用 Python 的字符串格式化功能,以一种美观、有条理的方式来格式化和显示我们的股票信息。字符串格式化允许我们指定不同类型的数据在字符串中应该如何呈现。
print('%10s %10d %10.2f' % (s.name, s.shares, s.price))

在这段代码中,我们使用了 Python 中的旧式字符串格式化。% 运算符用于将值替换到字符串模板中。字符串模板 '%10s %10d %10.2f' 定义了股票名称、股数和价格应该如何格式化。

输出:

      GOOG        100     490.10

这个格式化后的字符串的工作原理如下:

  • %10s 将字符串格式化为宽度为 10 个字符的字段(右对齐)。这意味着股票名称将被放置在一个宽度为 10 个字符的空间中,并且在该空间内右对齐。
  • %10d 将整数格式化为宽度为 10 个字符的字段。因此,股数将被放置在一个宽度为 10 个字符的空间中。
  • %10.2f 将浮点数格式化为保留两位小数、宽度为 10 个字符的字段。价格将显示为两位小数,并放置在一个宽度为 10 个字符的空间中。
  1. 现在,让我们以同样的方式格式化 IBM 股票的信息。我们只需要在字符串格式化代码中将对象名称从 s 替换为 t
print('%10s %10d %10.2f' % (t.name, t.shares, t.price))

输出:

       IBM         50      91.50
  1. 在现代 Python 中,我们还可以使用 f - 字符串进行格式化。f - 字符串更易读且更易于使用。让我们使用 f - 字符串来比较这两只股票的成本。
print(f"Google stock costs ${s.cost()}, IBM stock costs ${t.cost()}")

在这个 f - 字符串中,我们直接将表达式嵌入到花括号 {} 中。Python 将计算这些表达式,并将结果插入到字符串中。

输出:

Google stock costs $49010.0, IBM stock costs $4575.0
  1. 当你完成实验后,是时候退出 Python 交互模式了。你可以使用 exit() 函数来实现这一点。
exit()

每个 Stock 对象都维护着自己的一组属性,这展示了面向对象编程中类实例的工作方式。这使我们能够创建多个股票对象,每个对象具有不同的值,同时共享相同的方法。

✨ 查看解决方案并练习

增强股票类

在 Python 中,类是组织数据和行为的强大方式。它们允许我们将相关的数据和函数组合在一起。在本节中,我们将通过添加一个显示格式化股票信息的方法来增强我们的 Stock 类。这是一个很好的例子,展示了我们如何在类中封装数据和行为。封装意味着将数据与操作该数据的方法捆绑在一起,这有助于使我们的代码更有条理且更易于管理。

  1. 首先,你需要在 WebIDE 编辑器中打开 stock.py 文件。stock.py 文件是我们一直在编写 Stock 类的地方。在编辑器中打开它,这样我们就可以对类定义进行修改。

  2. 现在,我们将修改 Stock 类,添加一个新的 display() 方法。这个方法将负责以美观的格式打印出股票信息。以下是具体实现方法:

class Stock:
    def __init__(self, name, shares, price):
        self.name = name
        self.shares = shares
        self.price = price

    def cost(self):
        return self.shares * self.price

    def display(self):
        print(f"Stock: {self.name}, Shares: {self.shares}, Price: ${self.price:.2f}, Total Cost: ${self.cost():.2f}")

__init__ 方法中,我们初始化了股票的名称、股数和价格。cost 方法通过将股数乘以价格来计算股票的总成本。新的 display 方法使用 f - 字符串来格式化并打印股票信息,包括名称、股数、价格和总成本。

  1. 做出这些更改后,你需要保存文件。你可以通过按下键盘上的 Ctrl+S 键,或者点击编辑器中的保存图标来完成保存操作。保存文件可确保你的更改被保留,并且后续可以使用。

  2. 接下来,我们将启动一个新的 Python 交互会话。交互会话允许我们立即测试代码。要启动会话,请在终端中运行以下命令:

python3 -i stock.py

-i 选项告诉 Python 在执行 stock.py 文件后启动一个交互会话。这样,我们就可以立即使用 Stock 类及其方法。

  1. 现在,让我们创建一个股票对象并使用新的 display() 方法。我们将创建一个代表苹果公司股票的对象,然后调用 display 方法来查看格式化后的信息。以下是代码:
apple = Stock('AAPL', 200, 154.50)
apple.display()

当你在交互会话中运行这段代码时,你将看到以下输出:

Stock: AAPL, Shares: 200, Price: $154.50, Total Cost: $30900.00

这个输出表明 display 方法正常工作,并且按预期格式化了股票信息。

  1. 最后,让我们创建一个股票列表并显示所有股票信息。这将展示我们如何对多个股票对象使用 display 方法。以下是代码:
stocks = [
    Stock('GOOG', 100, 490.10),
    Stock('IBM', 50, 91.50),
    Stock('AAPL', 200, 154.50)
]

for stock in stocks:
    stock.display()

当你运行这段代码时,你将得到以下输出:

Stock: GOOG, Shares: 100, Price: $490.10, Total Cost: $49010.00
Stock: IBM, Shares: 50, Price: $91.50, Total Cost: $4575.00
Stock: AAPL, Shares: 200, Price: $154.50, Total Cost: $30900.00

通过在类中添加 display() 方法,我们将格式化逻辑封装在了类本身中。这使得我们的代码更有条理且更易于维护。如果我们需要更改股票信息的显示方式,我们只需要在一个地方修改 display 方法,而不是在整个代码中进行修改。

✨ 查看解决方案并练习

总结

在本次实验中,你学习了如何定义一个带有属性和方法的 Python 类,如何创建具有特定属性值的类实例,如何访问对象属性以及如何调用对象方法。你还学习了以各种方式格式化和显示对象信息,处理同一类的多个对象,以及通过添加新方法来增强类。

这些面向对象编程的概念在 Python 中是基础内容,也是在大型应用程序中组织代码的基础。类有助于将相关的数据和功能组合在一起,使你的代码更具模块化,更易于维护。为了进一步提升你的技能,你可以考虑为 Stock 类添加一些功能,例如数据验证、更新股数或价格的方法,以及计算盈亏的方法。