1. __init__ 注意事项

如果父类有__init__函数,子类没有,则子类自动调用父类__init__函数

如果父类有__init__函数,子类也有,则子类必须主动调用父类__init__函数,否则会报错

class A:def __init__(self):self.name = "A"def PrintName(self):print self.nameclass B(A):def __init__(self):A.__init__(self)self.__age = 18obj = B()
obj.PrintName()

下面讲解来源:http://www.cnblogs.com/zyxstar2003/archive/2011/03/21/1989954.html

注意1、__init__并不相当于C#中的构造函数,执行它的时候,实例已构造出来了。

1
2
3
4
5
class A(object):
    def __init__(self,name):
        self.name=name
    def getName(self):
        return 'A '+self.name

当我们执行

1
a=A('hello')

时,可以理解为

1
2
a=object.__new__(A)
A.__init__(a,'hello')

即__init__作用是初始化已实例化后的对象。

注意2、子类可以不重写__init__,实例化子类时,会自动调用超类中已定义的__init__

1
2
3
4
5
6
7
class B(A):
    def getName(self):
        return 'B '+self.name
if __name__=='__main__':
    b=B('hello')
    print b.getName()

但如果重写了__init__,实例化子类时,则不会隐式的再去调用超类中已定义的__init__

1
2
3
4
5
6
7
8
9
class C(A):
    def __init__(self):
        pass
    def getName(self):
        return 'C '+self.name
if __name__=='__main__':
    c=C()
    print c.getName()

则会报"AttributeError: 'C' object has no attribute 'name'”错误,所以如果重写了__init__,为了能使用或扩展超类中的行为,最好显式的调用超类的__init__方法

1
2
3
4
5
6
7
8
9
class C(A):
    def __init__(self,name):
        super(C,self).__init__(name)
    def getName(self):
        return 'C '+self.name
if __name__=='__main__':
    c=C('hello')   
    print c.getName()

2.继承有普通继承和super继承两种

3.python类有新式类和经典类

区别:
1)首先,写法不一样:

class A:passclass B(object): pass 

2)在多继承中,新式类采用广度优先搜索,而旧式类是采用深度优先搜索。
3)新式类更符合OOP编程思想,统一了python中的类型机制。

4)旧类无法使用super
5)新类的类型是type
作者:Jack Twain/Zeno
链接:https://www.zhihu.com/question/22475395/answer/66944861
来源:知乎

【python】继承时注意事项相关推荐

  1. python继承,看这篇就够了

    前言 说到面向对象,大家都不陌生.在python中,一切皆对象,我们使用类来表示具有相同属性和方法的对象的集合.而继承则是一种创建新类的方式,这个新类可以使用被继承类的属性.今天就来说说python中 ...

  2. Python文件操作注意事项

    今天继续给大家介绍Python相关知识,本文主要内容是Python文件操作注意事项. 一.文件操作流程注意事项 在文章Python文件操作详解(一)中,我们讲解过,文件操作的流程是打开文件--操作文件 ...

  3. python 继承和多态

    python 继承和多态 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Ba ...

  4. linux安装python虚拟环境_linux环境下安装python虚拟环境及注意事项

    创建python虚拟环境virtualenv.virtualenvwrapper 1,为什么需要搭建虚拟环境 由于当机器上两个项目依赖于相同包的不同版本时,会导致项目运行失败,此时可以安装虚拟环境 . ...

  5. python编程语言继承_python应用:学习笔记(Python继承)

    学习笔记(Python继承)Python是一种解释型脚本语言,可以应用于以下领域: web 和 Internet开发 科学计算和统计 人工智能 教育 桌面界面开发 后端开发 网络爬虫 有几种叫法(父类 ...

  6. python继承——封装

    python继承--封装 1 为什么要封装 封装数据的主要原因是:保护隐私 封装方法的主要原因是:隔离复杂度 2 封装分为两个层面 第一个层面的封装(什么都不用做):创建类和对象会分别创建二者的名称空 ...

  7. 如何运行一段python代码_Python退出时强制运行一段代码如何实现 Python退出时强制运行一段代码实现方法...

    本篇文章小编给大家分享一下Python退出时强制运行一段代码实现方法,代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 设想这样一个场景,你要给一个项目开发测 ...

  8. python 继承的规则

    本文讲述python继承规则. 先来看一些概念: 面向对象的概念 简单地说 面向对象编程(Object Oriented Programming)简称OOP 就是使我们分析.设计 和实现一个系统的方法 ...

  9. python继承方式是基于原型吗_[译] 为什么原型继承很重要

    五天之前我写了一个关于ES6标准中Class的文章.在里面我介绍了如何用现有的Javascript来模拟类并且介绍了ES6中类的用法,其实它只是一个语法糖.感谢Om Shakar以及Javascrip ...

最新文章

  1. CSDN”原力计划“在召唤:技术人请集结,用原创技术影响万千开发者
  2. jquery实现截取pc图片_jquery 上传图片自由截取
  3. php中mysqli_query,在PHP中如何使用mysqli_query()函数
  4. android转IOS开发学习计划
  5. GDCM:gdcm::Tag的测试程序
  6. 9.7 top:实时显示系统中各个进程的资源占用状况
  7. 前端学习(3047):vue+element今日头条管理-使用table表格组件
  8. java从键盘上录入信息
  9. Jenkins与Docker的自动化CI/CD实战
  10. python中pickle模块无法导入_python pickle模块
  11. vue-cli 做前端+ nodejs做服务端的 IIS部署
  12. 测试方案的设计及模板
  13. 权限提升 bypass
  14. 【步步到位】mysql安装教程 8.0.26
  15. 计算机导论(1—6章)笔记
  16. 服务器挂硬盘 BIOS,TaiShan服务器通过BIOS格式化硬盘将硬盘中的残留数据擦除操作方法...
  17. 一个好玩的小游戏——麻神之战
  18. 从各大APP年度报告看用户画像——标签,比你更懂你自己
  19. 台式计算机怎样能搜无线连接,台式机怎样能够连入wifi呢
  20. 影响网站收录量有哪些因素

热门文章

  1. cvc 降噪_哪款蓝牙耳机降噪效果最好,降噪音质俱佳的蓝牙耳机推荐
  2. lms自适应滤波器matlab_自适应回声消除器简介
  3. php 删除 session 文件,如何删除php中的session文件
  4. preg_replace在java中_Java相当于PHP的preg_replace_callback
  5. java终结方法_java编程思想之并发(终结任务)
  6. linux下添加磁盘
  7. 微软 Small Basic 简体中文版 已经发布了
  8. 震惊!腾讯要建AI鹅厂,百度让狗刷脸购物,锤子R-1真机披露
  9. 建模数据科学家的福音:MIT系特征自动构造工具今日发布
  10. 英伟达有魔力,Uber小心翼翼 | 跟着开复去硅谷Day1