# 2.1.2 对象

对象是Python中的一个十分基本的概念。在开始写第一句代码之前，我们先来了解什么是“对象”。

本节目标：

* 了解什么是对象，它与现实中的“对象”之间的相似处。
* 了解什么是类
* 初步掌握将现实中的物体抽象成“对象”的方法。
* 学会用`turtle`模块创建小海龟对象。

## 什么是对象、类

对象（Object）是来源于现实世界中“对象”的概念。

**Learning By Reading 难度：★ 重要性：★★★★★**

* 阅读[材料](http://blog.csdn.net/linyixiao88/article/details/50833502)的前几段（出现代码之前的段落），

  了解对象、类、属性、方法。

以小海龟画图为例，小海龟便是对象。小海龟的颜色、形状、爬行速度等是它的属性。 小海龟的方法有前进、转弯等等。

对象是属性和方法的集合，Python中每个对象都属于一个“类”。类相当于一个创造对象的模板。 创建对象的过程可以抽象地描述为把属性存在内存中的过程。一个对象有了全部的属性和方法，也就被创造出来了。

类通常是根据代码的需求来设计的。比如有一个类，`笔`，它的属性有颜色、粗细等，方法有“写”。 如果我们需要让有些笔（比如圆珠笔）可以转（转笔），有些笔（比如白板笔）因为体型方面的原因不能转，这时， 设计两个类`圆珠笔`和`白板笔`会比较合适。

在编程的过程中，我们可以把自己想象成这个虚拟世界的神明，我们要创造出小海龟们， 并给它们下达指令。

**Learning By Thinking 难度：★★ 重要性：★★★★★**

* 试着将自己熟悉的物体抽象成“对象”，说说它有哪些属性和方法。
* 抽象需要合理、实用。
* 教练指出学生的抽象中是否有不合适的地方。

## 如何创造对象

**Learning By Doing 难度：★ 重要性：★★★★★**

* 运行以下代码，观察结果。

  ```python
  import turtle
  t1 = turtle.Turtle()
  t2 = turtle.Turtle()
  turtle.mainloop()
  ```

以上代码中，`import turtle`告诉解释器我们需要使用小海龟画图的模块，`turtle`就是模块的名字。（上一节提到了`import`的过程，还记得吗？） 使用模块中的任何东西，格式都是`moduleA.xxx`，其中`moduleA`是模块名，`xxx`是要使用的类/常量/函数的名字。 比如`turtle.Turtle`指的是`turtle`库中的`Turtle`类。在Python中，不管是类、常量或是其他东西，都是`module.xxx`的格式。

注意区分`turtle`库和`turtle.Turtle`类。

`t1 = turtle.Turtle()`创建了一个`Turtle`（小海龟）对象，名字是`t1`。

其中`t1 =`将等号后面的值赋给`t1`，就像数学中说`令 x = 5`一样。 而`()`在这里的意思是“创造`Turtle`类的对象”。 `()`符号来源于数学中的函数，就像数学中有`f(0)`一样。

`t2 = turtle.Turtle()`创建了一个`Turtle`对象，名字是`t2`。

`turtle.mainloop()`是一行神奇的代码，如果没有这行代码，程序运行完`t2 = turtle.Turtle()`之后会把小海龟窗口关掉（试一试！）。 （如果是在`Spyder`中运行，窗口会失去响应。） 所以这行代码的作用就是让Python不要急着关掉窗口，让我们可以多看一看画出来的结果。 `mainloop`是`turtle`库中定义好的一个函数，下一节我们将了解函数这个概念。

需要注意的是，执行`turtle.mainloop()`之后Python不再再执行其他指令，所以必须放在程序的最后。

可以看到在屏幕正中央出现了一只三角形，不要怀疑，那就是我们的小海龟。

为什么创建了两只却只看到了一只？因为重合在一起了，下一节我们将移动小海龟，这样就能看见它们了。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://coding-girls-club.gitbook.io/python-turtle-tutorial/2-python-bian-cheng/2.1-lei-fang-fa-tiao-yong-qian-jin-yu-zhuan-wan/2.1.2-dui-xiang.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
