14.6 一个示例类—— HotDog

在这个例子中,我们假设热狗总包括一个小面包。(否则可真是一团糟。)下面为热狗指定一些属性和方法。

下面是热狗的属性。

  • cooked_level:这是一个数字,通过这个属性我们可以知道热狗烤了多长时间。0 ~ 3 表示还是生的,超过 3 表示半生不熟,超过 5 表示已经烤好,超过 8 表示已经烤成木炭了!我们的热狗开始时是生的。

  • cooked_string:这是一个字符串,描述热狗的生熟程度。

  • condiments:这是热狗上的配料列表,比如番茄酱、芥末酱等。

下面是热狗的方法。

  • cook():把热狗烤一段时间。这会让热狗越来越熟。

  • add_condiment():给热狗加一些配料。

  • __init__():创建实例并设置默认属性。

  • __str__():让 print 的结果看起来更好一些。

首先,需要定义类。先定义 __init__() 方法,它会为热狗设置默认属性:

  1. class HotDog:
  2. def __init__(self):
  3. self.cooked_level = 0
  4. self.cooked_string = "Raw"
  5. self.condiments = []

先从一个没有加任何配料的生热狗开始。

14.6 一个示例类—— HotDog - 图1

现在,来建立一个方法烤热狗:

{%}

继续下面的工作之前,先对这一部分做个测试。首先,需要创建热狗的一个实例,还要检查它的属性。

  1. myDog = HotDog()
  2. print myDog.cooked_level
  3. print myDog.cooked_string
  4. print myDog.condiments

下面把这些内容都放在一个程序中,运行这个程序。代码清单 14-5 显示了(到目前为止)完整的程序。

代码清单 14-5 热狗程序的开始部分

  1. class HotDog:
  2. def __init__(self):
  3. self.cooked_level = 0
  4. self.cooked_string = "Raw"
  5. self.condiments = []
  6. def cook(self, time):
  7. self.cooked_level = self.cooked_level + time
  8. if self.cooked_level > 8:
  9. self.cooked_string = "Charcoal"
  10. elif self.cooked_level > 5:
  11. self.cooked_string = "Well-done"
  12. elif self.cooked_level > 3:
  13. self.cooked_string = "Medium"
  14. else:
  15. self.cooked_string = "Raw"
  16. myDog = HotDog()
  17. print myDog.cooked_level
  18. print myDog.cooked_string
  19. print myDog.condiments

像(Python)程序员一样思考

Python 中的另一个约定是类名总是以大写字母开头。目前为止,我们已经见到 BallHotDog,所以说我们一直都在遵循这个约定。

现在,运行代码清单 14-5 中的代码,看看会得到什么。结果应该像这样:

{%}

可以看到,属性分别是 cooked_level = 0cooked_string = "Raw",另外 condiments 为空。

现在来测试 cook() 方法。把下面的代码行增加到代码清单 14-5 中:

{%}

再运行这个程序,现在输出会变成:

{%}

看来我们的 cook() 方法能正常工作。cooked_level0 变成 4,而且字符串也得到更新(从 Raw 变成 Medium)。

下面来增加一些配料。这需要一个新的方法。另外还可以自己增加 __str__()函数,让打印对象更为容易。按代码清单 14-6 编辑程序。

代码清单 14-6 包含 cook()add_condiments()__str__()HotDog

{%}

这个代码清单有点儿长,但我还是建议你自己键入这些代码,而且你已经有了之前代码清单 14-5 中的部分代码,不过,如果你的手指确实很累,或者你没有时间,也可以在 \examples 文件夹或本书网站上找到这个代码。

运行这个程序,看看能得到什么。结果应该如下:

  1. >>> ================================ RESTART ================================
  2. >>>
  3. Raw hot dog.
  4. Cooking hot dog for 4 minutes...
  5. Medium hot dog.
  6. Cooking hot dog for 3 more minutes...
  7. Well-done hot dog.
  8. What happens if I cook it for 10 more minutes?
  9. Charcoal hot dog.
  10. Now, I'm going to add some stuff on my hot dog
  11. Charcoal hot dog with ketchup, mustard.

程序的第一部分创建了类。第二部分测试了烤这个虚拟热狗和添加配料的方法。不过从最后几行代码来看,我认为烤得太过了。这太浪费番茄酱和芥末酱了!

{%}