Python基础教程 创建自定义类

7.2.2 创建自定义类

终于要创建自定义类了!下面是一个简单的示例:

__metaclass__ = type # 如果你使用的是Python 2,请包含这行代码

class Person:

def set_name(self, name):

self.name = name

def get_name(self):

return self.name

def greet(self):

print("Hello, world! I'm {}.".format(self.name))

注意 旧式类和新式类是有差别的。现在实在没有理由再使用旧式类了,但在Python 3之前,默认创建的是旧式类。在较旧的Python版本中,要创建新式类,应在脚本或模块开头放置赋值语句__metaclass__ = type,但我不会在每个示例中都显式地包含这条语句。当然,还有其他解决方案,如从新式类(如object)派生出子类。有关如何派生子类,稍后将详细介绍。如果你使用的是Python 3,就无需考虑这一点,因为根本没有旧式类了。有关这方面的详细信息,请参阅第9章。

这个示例包含三个方法定义,它们类似于函数定义,但位于class语句内。 Person当然是类的名称。 class语句创建独立的命名空间,用于在其中定义函数(参见7.2.5节)。一切看起来都挺好,但你可能想知道参数self是什么。它指向对象本身。那么是哪个对象呢?下面通过创建两个

>>> foo = Person()

>>> bar = Person()

>>> foo.set_name('Luke Skywalker')

>>> bar.set_name('Anakin Skywalker')

>>> foo.greet()

Hello, world! I'm Luke Skywalker.

>>> bar.greet()

Hello, world! I'm Anakin Skywalker.

这个示例可能有点简单,但澄清了self是什么。对foo调用set_name和greet时, foo都会作为第一个参数自动传递给它们。我将这个参数命名为self,这非常贴切。实际上,可以随便给这个参数命名,但鉴于它总是指向对象本身,因此习惯上将其命名为self。

显然, self很有用,甚至必不可少。如果没有它,所有的方法都无法访问对象本身——要操作的属性所属的对象。与以前一样,也可以从外部访问这些属性。

>>> foo.name

'Luke Skywalker'

>>> bar.name = 'Yoda'

>>> bar.greet()

Hello, world! I'm Yoda.

提示 如果foo是一个Person实例,可将foo.greet()视为Person.greet(foo)的简写,但后者的多态性更低。

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

扫码关注腾讯云开发者

领取腾讯云代金券