Python子类继承父类构造函数详解


Posted in Python onFebruary 19, 2019

如果在子类中需要父类的构造方法就需要显式地调用父类的构造方法,或者不重写父类的构造方法。

子类不重写 __init__,实例化子类时,会自动调用父类定义的 __init__。

class Father(object):
  def __init__(self, name):
    self.name=name
    print ( "name: %s" %( self.name) )
  def getName(self):
    return 'Father ' + self.name
 
class Son(Father):
  def getName(self):
    return 'Son '+self.name
 
if __name__=='__main__':
  son=Son('runoob')
  print ( son.getName() )

输出结果为:

name: runoob
Son runoob

如果重写了__init__ 时,实例化子类,就不会调用父类已经定义的 __init__,语法格式如下:

class Father(object):
  def __init__(self, name):
    self.name=name
    print ( "name: %s" %( self.name) )
  def getName(self):
    return 'Father ' + self.name
 
class Son(Father):
  def __init__(self, name):
    print ( "hi" )
    self.name = name
  def getName(self):
    return 'Son '+self.name
 
if __name__=='__main__':
  son=Son('runoob')
  print ( son.getName() )

输出结果为:

hi
Son runoob

如果重写了__init__ 时,要继承父类的构造方法,可以使用 super 关键字:

super(子类,self).__init__(参数1,参数2,....)

还有一种经典写法:

父类名称.__init__(self,参数1,参数2,...)
class Father(object):
  def __init__(self, name):
    self.name=name
    print ( "name: %s" %( self.name))
  def getName(self):
    return 'Father ' + self.name
 
class Son(Father):
  def __init__(self, name):
    super(Son, self).__init__(name)
    print ("hi")
    self.name = name
  def getName(self):
    return 'Son '+self.name
 
if __name__=='__main__':
  son=Son('runoob')
  print ( son.getName() )

输出结果为:

name: runoob
hi
Son runoob

Python 相关文章推荐
python从入门到精通(DAY 3)
Dec 20 Python
Django自定义分页与bootstrap分页结合
Feb 22 Python
requests和lxml实现爬虫的方法
Jun 11 Python
python topN 取最大的N个数或最小的N个数方法
Jun 04 Python
python实现从文件中读取数据并绘制成 x y 轴图形的方法
Oct 14 Python
浅析Python 实现一个自动化翻译和替换的工具
Apr 14 Python
Flask教程之重定向与错误处理实例分析
Aug 01 Python
Python模块相关知识点小结
Mar 09 Python
Python Web项目Cherrypy使用方法镜像
Nov 05 Python
python各种excel写入方式的速度对比
Nov 10 Python
python爬虫--selenium模块
Mar 31 Python
详解Django的MVT设计模式
Apr 29 Python
Python 隐藏输入密码时屏幕回显的实例
Feb 19 #Python
Python3标准库总结
Feb 19 #Python
Python语言检测模块langid和langdetect的使用实例
Feb 19 #Python
对python周期性定时器的示例详解
Feb 19 #Python
Python3数字求和的实例
Feb 19 #Python
对Python定时任务的启动和停止方法详解
Feb 19 #Python
python的schedule定时任务模块二次封装方法
Feb 19 #Python
You might like
linux下 C语言对 php 扩展
2008/12/14 PHP
PHP去除字符串最后一个字符的三种方法实例
2017/03/01 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
2018/02/06 PHP
Yii2.0框架behaviors方法使用实例分析
2019/09/30 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
JavaScript delete 属性的使用
2009/10/08 Javascript
JQERY limittext 插件0.2版(长内容限制显示)
2010/08/27 Javascript
jQuery EasyUI API 中文文档 可调整尺寸
2011/09/29 Javascript
JS左右无缝滚动(一般方法+面向对象方法)
2012/08/17 Javascript
JavaScript中instanceof与typeof运算符的用法及区别详细解析
2013/11/19 Javascript
浅谈Javascript Base64 加密解密
2014/12/28 Javascript
javascript定义变量时带var与不带var的区别分析
2015/01/12 Javascript
JavaScript实现简单的拖动效果
2016/07/02 Javascript
jQuery实现获取h1-h6标题元素值的方法
2017/03/06 Javascript
Vue和Bootstrap的整合思路详解
2017/06/30 Javascript
vuejs+element-ui+laravel5.4上传文件的示例代码
2017/08/12 Javascript
Javascript获取某个月的天数
2018/05/30 Javascript
JS双向链表实现与使用方法示例(增加一个previous属性实现)
2019/01/31 Javascript
使用layui前端框架弹出form表单以及提交的示例
2019/10/25 Javascript
利用PHP实现递归删除链表元素的方法示例
2020/10/23 Javascript
[02:42]2014DOTA2国际邀请赛 三冰专访:我会打到Ti20
2014/07/13 DOTA
教你如何在Django 1.6中正确使用 Signal
2014/06/22 Python
Pycharm学习教程(7)虚拟机VM的配置教程
2017/05/04 Python
Python Flask基础教程示例代码
2018/02/07 Python
Python paramiko模块的使用示例
2018/04/11 Python
Django uwsgi Nginx 的生产环境部署详解
2019/02/02 Python
tensorflow生成多个tfrecord文件实例
2020/02/17 Python
Html5游戏开发之乒乓Ping Pong游戏示例(三)
2013/01/21 HTML / CSS
C#中的验证控件有几种
2014/03/08 面试题
六查六看剖析材料
2014/02/15 职场文书
经典商业广告词
2014/03/13 职场文书
开展读书活动总结
2014/06/30 职场文书
单位个人查摆问题及整改措施
2014/10/28 职场文书
《辉夜大小姐想让我告白》第三季正式预告
2022/03/20 日漫
聊聊配置 Nginx 访问与错误日志的问题
2022/05/25 Servers
Spring Security动态权限的实现方法详解
2022/06/16 Java/Android