Return to Video

02-18 数据不变量

  • 0:00 - 0:08
    此时,我们已经明白,想写出完美的断言,覆盖所有的bug是艰难的,
  • 0:08 - 0:13
    但这不能阻止我们写出更好的断言,捕获尽可能多的bug,
  • 0:13 - 0:16
    断言在调试里面特别地有用。
  • 0:16 - 0:19
    因为断言是自动的,可以一次就检查
  • 0:19 - 0:24
    函数多次执行的情况--甚至所有执行的情况。
  • 0:24 - 0:29
    但它们要同时检查很大一部分的数据,一切都是自动的。
  • 0:29 - 0:34
    很大一部分的数据是什么意思?举例来说吧,
  • 0:34 - 0:37
    假设,我们要实现一个时间的类。
  • 0:37 - 0:42
    时间包括小时、分钟、秒,我们需要使用断言
  • 0:42 - 0:46
    来自动地检查一个时间对象是否一致正确,
  • 0:46 - 0:50
    即小时数是否在正确的范围,分钟数也正确?
  • 0:50 - 0:52
    秒数也没错?
  • 0:52 - 0:57
    这是我们的时间类--有个初始函数或叫构造函数的,接收
  • 0:57 - 1:00
    三个参数:小时,分钟,秒,
  • 1:00 - 1:05
    每个的默认值都是0,把这些参数赋给几个独立属性,
  • 1:05 - 1:09
    分别叫hours,minutes, seconds,都是一个时间对象里的属性。
  • 1:09 - 1:13
    需要有几个检查员方法,我们才能获取到这些内部属性值--
  • 1:13 - 1:15
    hours,minutes,seconds。
  • 1:15 - 1:20
    加入检查员方法后,得到小时数,分钟数,秒数,
  • 1:20 - 1:23
    就要以某种方式打印出时间对象了。
  • 1:23 - 1:30
    Python提供一个特殊的方法可以完成这个任务,即repr() 方法,
  • 1:30 - 1:35
    前后各两个下划线,中间是名字repr。它的功能就是:
  • 1:35 - 1:40
    这个特定类的某个对象要打印的话,就可以调用这个方法,
  • 1:40 - 1:44
    它会返回对象的字符串形式。
  • 1:44 - 1:50
    所以就是,用字符串的format方法,接收几个参数,
  • 1:50 - 1:55
    每个参数分别转化成这个字符串中指定的格式。
  • 1:55 - 2:02
    比如吧,:2d 即输出数值参数,使之占两位--
  • 2:02 - 2:07
    分钟也是占两位,秒也一样。
  • 2:07 - 2:09
    这个形式还不算完美。
  • 2:09 - 2:11
    这里最好还补上开头的0,
  • 2:11 - 2:16
    需要用冒号来分隔开 小时,分钟,秒,
  • 2:16 - 2:22
    所以字符串应该是这样,先是小时数,再是分钟数,
  • 2:22 - 2:25
    最后是秒数,它们都占两位,且都有前导0.
  • 2:25 - 2:27
    现在我们来看看它是怎么工作的。
  • 2:27 - 2:32
    初始化一个对象,13小时,0分,0秒。
  • 2:32 - 2:36
    使用是24小时制的格式来打印时间。
  • 2:36 - 2:40
    打印时间会调用这个repr方法,它能自动地
  • 2:40 - 2:43
    为我们的时间对象提供一个漂亮的表示格式。
  • 2:43 - 2:46
    我们运行一下,得到一个漂亮的字符串--
  • 2:46 - 2:50
    13小时,0分,0秒,即下午一点整。
Title:
02-18 数据不变量
Video Language:
English
Team:
Udacity
Project:
CS259 - Software Debugging
Duration:
02:53
秀隆 杨 added a translation

Chinese, Simplified subtitles

Revisions