【python】继承时注意事项
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类有新式类和经典类
class A:passclass B(object): pass
2)在多继承中,新式类采用广度优先搜索,而旧式类是采用深度优先搜索。
3)新式类更符合OOP编程思想,统一了python中的类型机制。
链接:https://www.zhihu.com/question/22475395/answer/66944861
来源:知乎
【python】继承时注意事项相关推荐
- python继承,看这篇就够了
前言 说到面向对象,大家都不陌生.在python中,一切皆对象,我们使用类来表示具有相同属性和方法的对象的集合.而继承则是一种创建新类的方式,这个新类可以使用被继承类的属性.今天就来说说python中 ...
- Python文件操作注意事项
今天继续给大家介绍Python相关知识,本文主要内容是Python文件操作注意事项. 一.文件操作流程注意事项 在文章Python文件操作详解(一)中,我们讲解过,文件操作的流程是打开文件--操作文件 ...
- python 继承和多态
python 继承和多态 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Ba ...
- linux安装python虚拟环境_linux环境下安装python虚拟环境及注意事项
创建python虚拟环境virtualenv.virtualenvwrapper 1,为什么需要搭建虚拟环境 由于当机器上两个项目依赖于相同包的不同版本时,会导致项目运行失败,此时可以安装虚拟环境 . ...
- python编程语言继承_python应用:学习笔记(Python继承)
学习笔记(Python继承)Python是一种解释型脚本语言,可以应用于以下领域: web 和 Internet开发 科学计算和统计 人工智能 教育 桌面界面开发 后端开发 网络爬虫 有几种叫法(父类 ...
- python继承——封装
python继承--封装 1 为什么要封装 封装数据的主要原因是:保护隐私 封装方法的主要原因是:隔离复杂度 2 封装分为两个层面 第一个层面的封装(什么都不用做):创建类和对象会分别创建二者的名称空 ...
- 如何运行一段python代码_Python退出时强制运行一段代码如何实现 Python退出时强制运行一段代码实现方法...
本篇文章小编给大家分享一下Python退出时强制运行一段代码实现方法,代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 设想这样一个场景,你要给一个项目开发测 ...
- python 继承的规则
本文讲述python继承规则. 先来看一些概念: 面向对象的概念 简单地说 面向对象编程(Object Oriented Programming)简称OOP 就是使我们分析.设计 和实现一个系统的方法 ...
- python继承方式是基于原型吗_[译] 为什么原型继承很重要
五天之前我写了一个关于ES6标准中Class的文章.在里面我介绍了如何用现有的Javascript来模拟类并且介绍了ES6中类的用法,其实它只是一个语法糖.感谢Om Shakar以及Javascrip ...
最新文章
- CSDN”原力计划“在召唤:技术人请集结,用原创技术影响万千开发者
- jquery实现截取pc图片_jquery 上传图片自由截取
- php中mysqli_query,在PHP中如何使用mysqli_query()函数
- android转IOS开发学习计划
- GDCM:gdcm::Tag的测试程序
- 9.7 top:实时显示系统中各个进程的资源占用状况
- 前端学习(3047):vue+element今日头条管理-使用table表格组件
- java从键盘上录入信息
- Jenkins与Docker的自动化CI/CD实战
- python中pickle模块无法导入_python pickle模块
- vue-cli 做前端+ nodejs做服务端的 IIS部署
- 测试方案的设计及模板
- 权限提升 bypass
- 【步步到位】mysql安装教程 8.0.26
- 计算机导论(1—6章)笔记
- 服务器挂硬盘 BIOS,TaiShan服务器通过BIOS格式化硬盘将硬盘中的残留数据擦除操作方法...
- 一个好玩的小游戏——麻神之战
- 从各大APP年度报告看用户画像——标签,比你更懂你自己
- 台式计算机怎样能搜无线连接,台式机怎样能够连入wifi呢
- 影响网站收录量有哪些因素
热门文章
- cvc 降噪_哪款蓝牙耳机降噪效果最好,降噪音质俱佳的蓝牙耳机推荐
- lms自适应滤波器matlab_自适应回声消除器简介
- php 删除 session 文件,如何删除php中的session文件
- preg_replace在java中_Java相当于PHP的preg_replace_callback
- java终结方法_java编程思想之并发(终结任务)
- linux下添加磁盘
- 微软 Small Basic 简体中文版 已经发布了
- 震惊!腾讯要建AI鹅厂,百度让狗刷脸购物,锤子R-1真机披露
- 建模数据科学家的福音:MIT系特征自动构造工具今日发布
- 英伟达有魔力,Uber小心翼翼 | 跟着开复去硅谷Day1