Python基础 类(一)

Python里的所有数据都是以对象形式存在的,无论是的简单的数字类型还是复杂的代码模块。然而,Python特殊的语法形式巧妙地将实现对象机制的大量细节隐藏起来。输入 num = 1 就可以创建一个值为 1 的整数对象,并且将这个对象值赋值给变量num。事实上,在Python中,只有当你想要创建属于自己的对象或者需要修改已有的对象的行为时,才需要关注对象的内部实现细节。

对象既包含数据(变量,更习惯称之为特性,attribute),也包含代码(函数,也成为方法)。它是某一类具体事务的特殊实例。例如,整数 7 就是一个包含了加法、乘法之类方法的对象。整数 8 则是另一个对象。这意味着在 Python 里,7和8都属于一个公共的类,我们称之为整数类。(字符串、list、dict)

当你想要创建一个别人从来没有创建过的新对象时,首先必须定义一个类,用以指明该类的对象所包含的内容(特性和方法)。

可以把对象想象成名词,那么方法就是动词。对象代表着一个独立的事物,它的方法则定义了它是如何与其他事物互相作用的。

与模块不同,你可以同时创建许多同类的对象,他们的特性值可能各不相同。对象就是像是包含了代码的超级数据结构。

使用 class 定义类

想要在Python中创建属于自己的类使用关键字 class 来定义,我们先看个例子。

假设你想要定义一些对象用于记录联系人,每个对象对应一个人。首先需要定义 Person 类作为生产对象的模具。在接下来的几个例子中,我们会不停更新这个类的内容,从最简单的开始,知道它成为一个可实际使用的类。

首先创建的是最简单的类,即一个没有任何内容的空类:

同函数一样,用 pass 表示这个类是一个空类。上面这种定义类的方法已经是最简形式,无法再忽略。你可以通过类名来创建对象,同调用函数一样:

在这个例子中,Person()创建了一个Person类的对象,并给它赋值 someone 这个名字。但是,由于我们的Person类是空的,所以由它创建的对象 someone 实际上什么也做不了。实际编程中,你永远也不会创建这样一个没用的类,我在这里只是为了从零开始引出后面每一步的内容。

我们来试着重新定义一下 Person 类。这一次,将 Python 中特殊的对象初始化方法放入其中:

我承认 init() 和 self 看起来很奇怪,但这就是实际的Python类的定义形式。init() 是 Python 中一个特殊的函数名,用于根据类的定义创建实例对象。self参数指向了这个正在被创建的对象本身。

当你在类生命定义 init() 方法时,第一个参数必须为 self。尽管 self 并不是一个 Python 保留字,但它很常用。

尽管我们添加了初始化方法,但用这个 Person 类创建的对象仍然什么也做不了。接着我们在初始化方法中添加 name 参数:

用 Person 类创建一个对象,为 name 特性传递一个字符串参数:

python执行:

Person.init(huter, “xiao ming”)

self 其实就是代表要实例化的对象,这个例子里是 hunter。

上面这短短的一行代码实际做了以下工作:

查看 Person 类的定义;

在内存中实例化(创建)一个新的对象

调用对象的 init 方法, 将这个新创建的对象作为 self 传入,并将另一个参数(’xiao ming’)作为 name 传入;

将 name 的值存入对象;

返回这个新的对象;

将名字 hunter 与这个对象关联。

这个新对象与任何其他的python对象一样。 你可以把它当作列表、元组、字典或集合中的元素,也可以把它当作参数传递给函数,或者把它作为函数的返回结果。

我们传入的 name 参数 作为对象的特性存储在了对象里。可以直接对它进行读写操作:

记住,在 Person 类定义的内部, 你可以直接通过 self.name 访问 name 特性。 而当创建了一个实际的对象后,例如这里的 hunter,需要通过 hunter.name 来访问他。

在类的定义中, init 并不是必需的。只有当需要区分由该类创建的不同对象时,才需要指定 init 方法。

好好消化下

下期继续

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180109G0P4PP00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券