笔误
修改理由:
相关信息:
- 类型:文档文章
- 文章: 面向对象编程
- 文档: 《Python 简明教程(2018)》
此投稿已在 6年前 合并。
内容修改:
| Old | New | Differences |
|---|---|---|
| 1 | ||
| 2 | 面对对象编程 | |
| 1 | 面向对象编程 | |
| 3 | 2 | ---------- |
| 4 | 3 | |
| 5 | 4 | 直到目前为止,我们已经使用函数、块语句来操作我们的数据。这叫做 *面向过程* 的方式进行编程。然而还有另外一种方式来组织你的程序:把数据和函数结合起来,并将其置入一种叫做对象的东西。这就叫做 *面向对象* 编程范式。在大多数情况下,你可以使用面向过程的编程,但是当写大型程序或者遇到了一些更加适合这种方法的时候,你可以使用基于对象的编程技术。 | … | … |
| 17 | 16 | 域有两种类型 - 他们可以属于每一个类的实例(也就是对象),也可以属于类本身。他们被分别称作实例变量和类的变量。 |
| 18 | 17 | |
| 19 | 18 | 使用 `class` 关键字来创建一个类。这个类的域和方法被列在一个代码块中。 |
| 20 | ||
| 19 | ||
| 21 | 20 | 关于 `self` |
| 22 | 21 | ---------- |
| 23 | 22 | … | … |
| 33 | 32 | |
| 34 | 33 | 这也意味着如果你有一个不声明任何形式参数的方法,却仍然有一个入口参数 —— `self` 。 |
| 35 | 34 | |
| 36 | ||
| 35 | ||
| 37 | 36 | |
| 38 | 37 | 类 |
| 39 | 38 | ------- | … | … |
| 64 | 63 | 之后,我们使用类的名字和一对括号创建了一个类的对象(实例)。(我们将在下一节学习 [更多的例子](https://python.swaroopch.com/oop.html#init) 。我们通过简单地打印变量 `p` 的方法确认这个变量类型。结果证明这是 `__main__` 模块中 `Person`类的一个对象。 |
| 65 | 64 | |
| 66 | 65 | 注意这个对象在内存中的地址也被显示出来。这个地址可能在你的电脑上有一个不同的值,这是由于 Python 只要找到空闲的内存空间就会在此处存放这个对象。 |
| 67 | ||
| 66 | ||
| 68 | 67 | |
| 69 | 68 | 方法 |
| 70 | 69 | ------- | … | … |
| 95 | 94 | |
| 96 | 95 | 现在我们具体的看一下 `self` 是如何工作的。注意到在 `say_hi` 方法中没有取得任何一个参数,却在方法定义的时候仍然有一个 `self` 参数。 |
| 97 | 96 | |
| 98 | ||
| 97 | ||
| 99 | 98 | |
| 100 | 99 | `__init__` 方法 |
| 101 | 100 | --------------------- | … | … |
| 140 | 139 | 正如 `say_hi` 方法所示的,现在我们在我们的方法之中可以使用 `self.name` 这个域了。 |
| 141 | 140 | |
| 142 | 141 | |
| 143 | ||
| 142 | ||
| 144 | 143 | 类和对象中的变量 |
| 145 | 144 | -------------------------- |
| 146 | 145 | … | … |
| 244 | 243 | |
| 245 | 244 | 我们使用一个 [装饰器](https://python.swaroopch.com/more.html#decorator) 来标记 `how_many` 方法,并将其作为一个类方法。 |
| 246 | 245 | |
| 247 | ||
| 246 | ||
| 248 | 247 | |
| 249 | 248 | 装饰器可以被想象成为一个快捷的方式去调用一个包裹函数(一个包裹着另外一个函数的函数,因此可以在内部函数调用之前及之后做一些事情),因此使用 `@classmethod` 装饰器和如下调用等价: |
| 250 | 249 | … | … |
| 270 | 269 | > 在 Python 中,所有的成员(包括数据成员)都是 *公共的* ,所有的方法都是 *虚拟*的。 |
| 271 | 270 | |
| 272 | 271 | |
| 273 | ||
| 272 | ||
| 274 | 273 | |
| 275 | 274 | 继承 |
| 276 | 275 | ----------- | … | … |
| 289 | 288 | |
| 290 | 289 | `SchoolMember` 类在这种情况下被称为基本类或者超类。而 `Teacher` 和 `Student` 类被成为派生类或者子类。 |
| 291 | 290 | |
| 292 | ||
| 291 | ||
| 293 | 292 | 我们来看看这个例子(保存为 `oop_subclass.py` ): |
| 294 | 293 | |
| 295 | 294 | ``` | … | … |
| 366 | 365 | |
| 367 | 366 | `end` 参数在父类 `tell()` 方法中调用的 `print` 函数中被使用,以使得打印完一句话之后,下一次打印紧接在第一句话之后,而不换行。这个技巧可以使得 `print` 函数在输出结束时不打印 `\n` 符号(换行)。 |
| 368 | 367 | |
| 369 | ||
| 368 | ||
| 370 | 369 | |
| 371 | 370 | 总结 |
| 372 | 371 | ------- |
关于 LearnKu