Python基础教程 调用未关联的超类构造函数

9.2.2 调用未关联的超类构造函数

本节介绍的方法主要用于解决历史遗留问题。在较新的Python版本中,显然应使用函数super(这将在下一节讨论)。然而,很多既有代码使用的都是本节介绍的方法,因此你必须对其有所了解。另外,这种方法也极具启迪意义,淋漓尽致地说明了关联方法和未关联方法之间的差别。

言归正传。如果你觉得本节的标题有点吓人,请放松心情。调用超类的构造函数实际上很容易,也很有用。下面先给出前一节末尾问题的解决方案。

class SongBird(Bird):

def __init__(self):

Bird.__init__(self)

self.sound = 'Squawk!'

def sing(self):

print(self.sound)

在SongBird类中,只添加了一行,其中包含代码Bird.__init__(self)。先来证明这确实管用,再解释这到底意味着什么。

>>> sb = SongBird()

>>> sb.sing()

Squawk!

>>> sb.eat()

Aaaah ...

>>> sb.eat()

No, thanks!

这样做为何管用呢?对实例调用方法时,方法的参数self将自动关联到实例(称为关联的方法),这样的示例你见过多个。然而,如果你通过类调用方法(如Bird.__init__),就没有实例与其相关联。在这种情况下,你可随便设置参数self。这样的方法称为未关联的。这就对本节的标题做出了解释。

通过将这个未关联方法的self参数设置为当前实例,将使用超类的构造函数来初始化SongBird对象。这意味着将设置其属性hungry。

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

扫码关注腾讯云开发者

领取腾讯云代金券