少说话多写代码之Python学习047——类的成员(调用父类构造函数)

栏目: Python · 发布时间: 7年前

内容简介:前面我们知道了在Python中如何继承。我们看下面的继承关系,Bird类有一个eat方法。BigBird继承了Bird,并且新增了sing方法。输出子类,

前面我们知道了在 Python 中如何继承。我们看下面的继承关系,Bird类有一个eat方法。BigBird继承了Bird,并且新增了sing方法。

class Bird:
    def __init__(self):
        self.hungry=True

    def eat(self):
        if self.hungry:
            print('开始吃,好好吃...')
            self.hungry=False
        else:
            print('吃饱了,不要了...')

b= Bird()
b.eat();
b.eat()

输出

开始吃,好好吃...
吃饱了,不要了...

子类,

class BigBird(Bird):
    def __init__(self):
        self.sound='小燕子,穿花衣,年年春天来这里...'
    def sing(self):
        print(self.sound)

bg = BigBird()
bg.sing()
bg.eat()

调用sing方法输出

小燕子,穿花衣,年年春天来这里...

调用eat报异常如下:

Traceback (most recent call last):
  File "D:/work/Python/ClassElement2.py", line 27, in <module>
    bg.eat()
  File "D:/work/Python/ClassElement2.py", line 9, in eat
    if self.hungry:
AttributeError: 'BigBird' object has no attribute 'hungry'

因为BigBird中没有调用父类Bird中的构造函数,所以没有初始化父类的hungry的值。如果想要eat方法能正常执行,我们需要在BigBird的构造函数中调用父类的构造函数。

如下,

class BBigBird(Bird):
    def __init__(self):
        Bird.__init__(self)
        self.sound='小燕子,穿花衣,年年春天来这里...'
    def sing(self):
        print(self.sound)

bg = BBigBird()
bg.sing()
bg.eat()

输出

小燕子,穿花衣,年年春天来这里...
开始吃,好好吃...

因为在调用一个实例的方法时,该方法的self参数会被自动绑定到实例上。上面这种直接调用类的方法,比如Bird.__init__(self),其实没有实例绑定。这样的方法是未绑定的。

上面例子中,将当前BBigBird的实例作为self参数提供给未绑定的方法Bird.__init__,BBigBird就能够使用父类的构造函数,hungry会被赋值。

工程文件下载: https://download.csdn.net/download/yysyangyangyangshan/10797322


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java多线程编程实战指南(设计模式篇)

Java多线程编程实战指南(设计模式篇)

黄文海 / 电子工业出版社 / 2015-10 / 59.00

随着CPU 多核时代的到来,多线程编程在充分利用计算资源、提高软件服务质量方面扮演了越来越重要的角色。而 解决多线程编程中频繁出现的普遍问题可以借鉴设计模式所提供的现成解决方案。然而,多线程编程相关的设计模式书籍多采用C++作为描述语言,且书中所举的例子多与应用开发人员的实际工作相去甚远。《Java多线程编程实战指南(设计模式篇)》采用Java(JDK1.6)语言和UML 为描述语言,并结合作者多......一起来看看 《Java多线程编程实战指南(设计模式篇)》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

随机密码生成器
随机密码生成器

多种字符组合密码

html转js在线工具
html转js在线工具

html转js在线工具