转 python语法学习面向对象之继承
2016-08-14 10:00
232 查看
传送门
python语法学习面向对象之继承
只要涉及到面向对象,”类“是必须出现的一个代名词。
类和对象是面向对象编程的两个主要方面。类创建一个新类型,而对象是这个类的实例。
类的一些概念:
包括初始化方法__init__,可以理解为构造,self,理解为this,等等在前一篇文章中介绍过,现在就学习类的继承。
继承:
面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。继承完全可以理解成类之间的类型和子类型关系。
需要注意的地方:继承语法 class 派生类名(基类名)://... 基类名写作括号里,基本类是在类定义的时候,在元组之中指明的。这与c#是有区别的。
何时使用继承:假如我需要定义几个类,而类与类之间有一些公共的属性和方法,这时我就可以把相同的属性和方法作为基类的成员,而特殊的方法及属性则在本类中定义,这样只需要继承基类这个动作,就可以访问到基类的属性和方法了,它提高了代码的可扩展性。
任何事情都有利有弊:继承的一个弱点就是,可能特殊的本类又有其他特殊的地方,又会定义一个类,其下也可能再定义类,这样就会造成继承的那条线越来越长,使用继承的话,任何一点小的变化也需要重新定义一个类,很容易引起类的爆炸式增长,产生一大堆有着细微不同的子类. 所以有个“多用组合少用继承”的原则,(我觉得两者一起使用才是最佳吧*^◎^*)
在python中继承中的一些特点:
1:在继承中基类的构造(__init__()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。有别于C#
2:在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数
3:Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。
如果在继承元组中列了一个以上的类,那么它就被称作“多重继承” 。
实例:定义一个模块,模块里定义了一个基类:
![](https://images2015.cnblogs.com/blog/660937/201608/660937-20160814095836171-1139900493.png)
子类:
![](https://images2015.cnblogs.com/blog/660937/201608/660937-20160814095853484-1576369864.png)
输出:
![](https://images2015.cnblogs.com/blog/660937/201608/660937-20160814095908421-392728337.png)
假如在子类中不用__init__()初始化函数,那么子类会继承基类的属性,如:
![](https://images2015.cnblogs.com/blog/660937/201608/660937-20160814095920843-842168410.png)
输出:
![](https://images2015.cnblogs.com/blog/660937/201608/660937-20160814095936031-1953846477.png)
转自:
作者:Joan
出处:http://www.cnblogs.com/Joans/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
python语法学习面向对象之继承
只要涉及到面向对象,”类“是必须出现的一个代名词。
类和对象是面向对象编程的两个主要方面。类创建一个新类型,而对象是这个类的实例。
类的一些概念:
包括初始化方法__init__,可以理解为构造,self,理解为this,等等在前一篇文章中介绍过,现在就学习类的继承。
继承:
面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。继承完全可以理解成类之间的类型和子类型关系。
需要注意的地方:继承语法 class 派生类名(基类名)://... 基类名写作括号里,基本类是在类定义的时候,在元组之中指明的。这与c#是有区别的。
何时使用继承:假如我需要定义几个类,而类与类之间有一些公共的属性和方法,这时我就可以把相同的属性和方法作为基类的成员,而特殊的方法及属性则在本类中定义,这样只需要继承基类这个动作,就可以访问到基类的属性和方法了,它提高了代码的可扩展性。
任何事情都有利有弊:继承的一个弱点就是,可能特殊的本类又有其他特殊的地方,又会定义一个类,其下也可能再定义类,这样就会造成继承的那条线越来越长,使用继承的话,任何一点小的变化也需要重新定义一个类,很容易引起类的爆炸式增长,产生一大堆有着细微不同的子类. 所以有个“多用组合少用继承”的原则,(我觉得两者一起使用才是最佳吧*^◎^*)
在python中继承中的一些特点:
1:在继承中基类的构造(__init__()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。有别于C#
2:在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数
3:Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。
如果在继承元组中列了一个以上的类,那么它就被称作“多重继承” 。
实例:定义一个模块,模块里定义了一个基类:
![](https://images2015.cnblogs.com/blog/660937/201608/660937-20160814095836171-1139900493.png)
子类:
![](https://images2015.cnblogs.com/blog/660937/201608/660937-20160814095853484-1576369864.png)
输出:
![](https://images2015.cnblogs.com/blog/660937/201608/660937-20160814095908421-392728337.png)
假如在子类中不用__init__()初始化函数,那么子类会继承基类的属性,如:
![](https://images2015.cnblogs.com/blog/660937/201608/660937-20160814095920843-842168410.png)
输出:
![](https://images2015.cnblogs.com/blog/660937/201608/660937-20160814095936031-1953846477.png)
转自:
作者:Joan
出处:http://www.cnblogs.com/Joans/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
相关文章推荐
- python语法学习面向对象之继承
- python语法学习面向对象之继承
- Python学习(七)面向对象 ——继承和多态
- 初学Python的学习笔记8----面向对象、数据封装、访问限制、继承和多态
- OC学习笔记02-OC中的面向对象语法表现 - 封装 继承与多态
- Python 学习笔记 - 面向对象(封装,继承和多态)
- 【python学习笔记】Python面向对象的理解(封装,继承,多态)
- Python学习之面向对象(封装、继承、多态)
- Python 学习笔记 - 面向对象(封装,继承和多态)
- Python基本语法学习小结
- 【学习点滴-面向对象】面向对象的困境--正方形不能继承长方形?
- python语法学习练习1
- PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
- 从面试题学习Javascript——面向对象(继承)
- 【Python】Python学习笔记(类的继承)
- Learn Python The Hard Way学习(41) - 学习面向对象
- Python语法学习笔记
- Dive in Python学习笔记五:对象和面向对象
- Python学习--面向对象的实例