class Bird:def __init__(self):   #构造函数self.hungry=Truedef eat(self):if self.hungry:print("Aaaah.....")self.hungry=Falseelse:print("No, thanks!")class SongBird(Bird):def __init__(self):self.sound="Squawk!"def sing(self):print(self.sound)sb=SongBird()
sb.sing()

运行结果为为:

Squawk!

但是当运行sb.eat()时,会有如下报错:

'SongBird' object has no attribute 'hungry'

因为在SongBird中重写了构造函数,但新的构造函数没有包含任何初始化属性hungry的代码。
要消除这个错误,SongBird的构造函数必须调用其超类(Bird)的构造函数,以确保基本的初始化得以执行。为此,有两种方法:

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

class Bird:   #超类def __init__(self):   #构造函数self.hungry=Truedef eat(self):if self.hungry:print("Aaaah.....")self.hungry=Falseelse:print("No, thanks!")class SongBird(Bird):  #子类def __init__(self):Bird.__init__(self)  #使用未关联的超类的构造函数self.sound="Squawk!"def sing(self):print(self.sound)sb=SongBird()
sb.sing()
sb.eat()

运行结果:

Squawk!
Aaaah.....

2) 使用函数Super

class Bird:def __init__(self):self.hungry=Truedef eat(self):if self.hungry:print("Aaaah.....")self.hungry=Falseelse:print("No, thanks!")class SongBird(Bird):def __init__(self):super().__init__()  ###使用super函数,相当于调用了超类的构造函数。self.sound="Squawk!"def sing(self):print(self.sound)sb=SongBird()
sb.sing()
sb.eat()

运行结果:

Squawk!
Aaaah.....

Python_继承_构造函数相关推荐

  1. Python_机器学习_算法_第1章_K-近邻算法

    Python_机器学习_算法_第1章_K-近邻算法 文章目录 Python_机器学习_算法_第1章_K-近邻算法 K-近邻算法 学习目标 1.1 K-近邻算法简介 学习目标 1 什么是K-近邻算法 1 ...

  2. W6_面向对象_封装_继承_多继承_多态

    W6_面向对象_封装_继承_多继承_多态 80.81.82.83.第02章节-Python3.5-面向对象介绍 84.第05章节-Python3.5-实例变量与类变量 85.第06章节-Python3 ...

  3. C++继承中构造函数、析构函数调用顺序及虚析构函数

    首先说说构造函数,大家都知道构造函数里就可以调用成员变量,而继承中子类是把基类的成员变成自己的成员,那么也就是说子类在构造函数里就可以调用基类的成员了,这就说明创建子类的时候必须先调用基类的构造函数, ...

  4. 多继承的构造函数和析构函数

    //程序2:多继承的构造函数 与 析构函数 #include<iostream> using namespace std;class A { public: A() { cout<& ...

  5. Java继承时构造函数的关系

    Java继承时构造函数的关系,先来一道笔试题给大家看看: 在继承中,关于构造方法的说明,下列说法错误的是() A.子类无条件的继承父类的无参构造方法, B.子类可以引用父类中的有参构造方法,使用sup ...

  6. C++ Primer 5th笔记(chap 15 OOP)继承的构造函数容器

    1. 继承的构造函数 1.1 C++11新标准中,派生类可以重用其直接基类定义的构造函数. 继承方式是提供一条注明了直接基类名的using声明语句. class Bulk_quote : public ...

  7. python 读grid 数据_科学网—Python_机器学习_总结14:Grid search - 李军的博文

    机器学习中存在两类参数:通过训练数据学习得到的参数:---可认为是辨识得到的参数,例如模型系数: 在学习算法中单独需要优化的参数--超参.调优参数:---算法自身的系数,例如决策树的深度参数: Gri ...

  8. python sklearn 梯度下降法_科学网—Python_机器学习_总结4:随机梯度下降算法 - 李军的博文...

    =============================================================== 总结如下: 1.随机梯度下降算法可以看成是梯度下降算法的近似,但通常它能 ...

  9. Python_机器学习_常用科学计算库_第6章_ Seaborn+综合案例

    Python_机器学习_常用科学计算库_第6章_ Seaborn+综合案例 文章目录 Python_机器学习_常用科学计算库_第6章_ Seaborn+综合案例 Seaborn 学习目标 6.1 Se ...

  10. 从零开始学C++之继承(二):继承与构造函数、派生类到基类的转换

    一.不能自动继承的成员函数 构造函数(包括拷贝构造函数) 析构函数 =运算符 二.继承与构造函数 基类的构造函数不被继承,派生类中需要声明自己的构造函数. 声明构造函数时,只需要对本类中新增成员进行初 ...

最新文章

  1. Blockchain实现详细手册
  2. 第一节 并发基础概念及实现、进程、线程基本概念
  3. python windows和linux路径_python复制文件,路径不存在问题(Windows和linux路径分隔符不统一)...
  4. Python 获取md5值(hashlib)
  5. (转)C# 根据当前时间获取,本周,本月,本季度等时间段 .Net中Exception
  6. python async socket_Python开发中常用的标准库,这些都是你应该掌握的
  7. 修改telnet提示并非_热血传奇:老玩家揭秘!这4个地方都被盛大修改过,第3个80%都想不到...
  8. 【数据库】sql连表查询
  9. (个人)AR电子书系统创新实训第三周(1)
  10. freecodecamp小练习——Falsy Bouncer过滤数组假值
  11. 湖北省仙桃市谷歌高清卫星地图下载
  12. android权限的最佳运用
  13. word中将上下2个表格连成1个表格
  14. NOIP2016——蚯蚓
  15. 05: 思科防火墙基础 、 思科ASA防火墙应用
  16. 关于用eclipse无法出现相关内容提示的问题
  17. 第一届天池 PolarDB 数据库性能大赛
  18. 设备档案管理软件中的检修预警设计思路
  19. 团购GPT-4 Plus!把价格打下来!
  20. DDR电路的PCB布线规则

热门文章

  1. 截取年月日在hana中怎么写_SAP HANA跟我学HANA系列之日期函数总结
  2. java用一条语句判断一个整数是不是2的整数次方
  3. python中正则表达式的用法_详解Python中的正则表达式的用法
  4. “凸优化基础”相关理论知识
  5. (day 51 - 字符转化为数字 ) 剑指 Offer 67. 把字符串转换成整数
  6. ssm提交post_SSM中get和post乱码笔记
  7. 指定版本_小米五一购机福利,购买Redmi7指定版本,送小米活塞耳机
  8. Zepto:基础学习
  9. 计算机科学家图灵,伟大的计算机科学家图灵
  10. Maven打包SpringBoot项目时分离依赖JAR,配置文件时POM文件的参考配置