概念:子类继承父类的属性和方法。
一个派生类(derived class)继承基类(bass class)字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。
一、单继承 :推崇。特点和使用
eg:
class Parent(object):
parentAttr = 100
def __init__(self):
print 'Calling parent constructor'
self.name='dengxiaoping'
def parentMethod(self):
print 'Calling parent method'
def setAttr(self, attr):
Parent.parentAttr = attr
def getAttr(self):
print 'Parrent attribute:',Parent.parentAttr
 
class Child1(Parent):
def __init__(self):
print 'Calling child1 constructor'
def childMethod(self):
print 'Calling child1 method'
Parent.parentMethod(self)
class Child2(Parent):
def childMethod(self):
print 'Calling child2 method'
self.parentMethod()
 
1、父类构造方法的继承
c1=Child1()
这一句是创建实例对象时,就会自动去调类的构造方法__init__进行初始化工作,如果子类中没有实现构造方法__init__,就会直接调用父类的构造方法
c1=Child1() #Calling child1 constructor
Child1() 创建实例对象:子类中有自己的构造函数,所以父类的构造函数不在起作用
print c1.name 报错
print c1.parentAttr #100 类属性直接继承过来
c2=Child2() #Calling parent constructor
Child2() 子类中没有构造方法,完全继承父类的构造方法,
print c2.name #dengxiaoping
总结:构造方法需要在其派生类的构造方法中专门调用,即子类不会主动继承基类的构造方法。
2、在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数
子类调用父类的方法有两种方式:
1、Parent.parentMethod(self)
2、self.parentMethod()
第一种是直接用父类的类名.方法名去调用父类的方法,但是需要注意的是,这种调用方法必须将self作为参数传进去并且作为第一个参数,表示指向这个类的实例本身。这种方法多用于方法重写时。
第二种是直接用self去调用父类的方法,为什么可以这样调用呢?因为一旦子类继承了父类,那么子类就拥有父类所有的公有方法和属性,所以此时父类的方法和属性就相当于子类自己了,所以可以直接用self去直接调用实例的方法,而不用再传入self参数了。
class Child1(Parent):
def __init__(self):
print 'Calling child1 constructor'
def childMethod(self):
print 'Calling child1 method'
Parent.parentMethod(self) #调用基类的方法,所以要加上参数self
这里:Parent.parentMethod(self)可以使用self.parentMethod()替换,
class Child2(Parent):
def childMethod(self):
print 'Calling child2 method'
self.parentMethod() #子类调用自己从父类那继承过来的父类的方法
 
 
3、在子类中引用父类的构造方法:
(1)superclassname.__init__(self,params) 尽量使用第一种
(2)super(subclassname,self).__init__(params) 这一种不支持多继承
class Child1(Parent):
def __init__(self):
Parent.__init__(self)
print 'Calling child1 constructor'
第二种:
class C(A):
def __init__(self):
super(C, self).__init__() #调用基类构造方法
 
4、通过构造方法,把变量从子类传到父类
如果基类构造方法需要传入参数时,创建子类的实例对象时,就必须传入对应的参数,否则会报参数数量不匹配的错。
class Parent(object):
parentAttr = 100
def __init__(self,name,age):
print 'Calling parent constructor'
self.name = name
self.age = age
 
class Child1(Parent):
def __init__(self,name,age):
Parent.__init__(self,name,age)
print 'Calling child1 constructor'
 
5、通过实例方法,把变量从子类传到父类
def parentMethod(self,name):
print 'Calling parent method'
print 'your old name is %s'%self.name
print 'your new name is %s'%name
 
def childMethod(self,name):
print 'Calling child1 method'
Parent.parentMethod(self,name)
 
6、Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找需要调用的方法,找不到才去基类中找)
新式类按照广度优先去查找,继承object的是新式类
经典类按照深度优先的方式去查找
 
7、子类只继承父类所有公有的属性和方法,并且也可以在子类中通过父类名来调用,而对于私有的属性和方法,子类是不进行继承的,因此在子类中是无法通过父类名来访问的。
 
8、继承的本质
对于面向对象的继承来说,其实就是将多个类共有的方法提取到父类中,子类仅需继承父类而不必一一实现每个方法。
注:除了子类和父类的称谓,你可能看到过 派生类 和 基类 ,他们与子类和父类只是叫法不同而已。
 
二、类间的关系判断
isinstance() 判断是否是实例
issubclass() 判断是否是子类
isinstance(c1,Child1)
issubclass(Child1,Parent)
issubclass(Child1,object)
 
三、多重继承:不建议使用多继承
一个子类继承多个父类
调用父类构造函数:superclassName.__init__(self, [parameter1[,parameter2....]] )
调用父类中的函数:Parent.parentMethod(self)
class D(object):
def bar(self):
print 'D.bar'
 
class C(D):
def __init__(self):
print 'B init'
def bar(self):
print 'C.bar'
 
class B(D):
def __init__(self):
print 'B init'
def bar(self):
print 'B.bar'
 
class A(B,C): 多重继承
def bar(self):
print 'A.bar'
a1=A() # B init 多重继承时,默认继承的第一个父类的构造方法
 
class A(B,C):
def __init__(self):
B.__init__(self)
C.__init__(self)
D.__init__(self)
def bar(self):
print 'A.bar'

Python之面向对象:继承的更多相关文章

  1. Python之面向对象继承和派生

    Python之面向对象继承和派生 什么是继承: 继承是一种创建新的类的方法.在Python中,新建的类可以继承自一个或多个父类.原始类称为基类或超类. 新建的类称为派生类或子类. Python中类的继 ...

  2. python小兵 面向对象继承super和c3算法

    python多继承 在前面的学习过程中. 我们已经知道了Python中类与类之间可以有继承关系. 当出现了x是一种y的的时候. 就可以使⽤继承关系. 即"is-a" 关系. 在继承 ...

  3. Python之面向对象继承复习

    总结:self是谁就从谁开始寻找

  4. python中多继承C3算法研究

    在python的面向对象继承问题中,单继承简单易懂,全部接受传承类的属性,并可添加自带属性, 但是,在多继承情况下,会遇到多个被继承者的顺序问题,以及多次继承后查找前几次继承者需求属性时,可能不易发现 ...

  5. python之面向对象(继承)

    类的继承 python之面向对象(继承) 面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制.继承完全可以理解成类之间的类型和子类型关系. 需要注意的地方:继承语法 c ...

  6. Python之路-面向对象&继承和多态&类属性和实例属性&类方法和静态方法

    一.面向对象 编程方式 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强…” 什么是面 ...

  7. python学习日记(面向对象——继承)

    什么是继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类 python中类的继承分为:单继承和多继承 class Par ...

  8. Python学习(七)面向对象 ——继承和多态

    Python 类的继承和多态 Python 类的继承 在OOP(Object Oriented Programming)程序设计中,当我们定义一个class的时候,可以从某个现有的class 继承,新 ...

  9. 《Python》 面向对象三大特性之继承

    一.继承大纲: 继承和抽象(两个概念) 1.单继承: 语法: 父类.基类.超类 子类.派生类 继承与重用:子类可以使用父类中的名字(变量和方法) 继承与派生:子类在父类的基础上又新创建了自己需要的方法 ...

  10. 【学习笔记】--- 老男孩学Python,day18 面向对象------继承

    继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类, 父类又可称为基类或超类,新建的类称为派生类或子类 python中类的继承分为:单继承和多继承 class Fathe ...

随机推荐

  1. C#的接口基础教程之五 实现接口

    1.显式实现接口成员 为了实现接口,类可以定义显式接口成员执行体(Explicit interface member implementations).显式接口成员执行体可以是一个方法.一个属性.一个 ...

  2. 关于Star UML

    为什么是使用Star UML而不是Visio 2013呢? 以前本人在大学期间使用的Visio 2013来绘制UML的,最近一个星期因为在阅读源码,所以有多学了一门UML绘制工具—Star UML,下 ...

  3. Oracle 配置文件目录

    Oracle 配置文件目录 ① 在oracle安装目录下,找D:\oracle\product\10.2.0\client_1\NETWORK\ADMIN中的tnsnames.ora文件,找到之后,配 ...

  4. win10如何修改host文件

    首先找到host文件,一般位于:C:\Windows\System32\drivers\etc 之后用记事本打开,直接修改.保存txt文件到桌面. 最后删除后缀名,再粘贴回去就可以了.

  5. 题解 P3367 【【模板】并查集】

    #include<iostream> #include<cstdio> using namespace std; int n,m,x,y,z; ]; //f[i]表示i的祖先 ...

  6. 什么是 TCP/IP?

    前言: 精通 TCP/IP,熟练使用 Socket 进行网路编程. 看到这句话,有没有感到很熟悉呀?相信很多人在投递简历的时候都看到过这条要求,很多人会觉得我们在实际开发中一般用不到这些知识,所以对这 ...

  7. django1.11文档 模型重点笔记

    模型最重要的属性是Manager. 它是Django 模型进行数据库查询操作的接口,并用于从数据库提取实例. 如果没有自定义Manager,则默认的名称为objects. Managers 只能通过模 ...

  8. java util - base64转换工具

    测试代码 package cn.java.codec.base64; public class Test { public static void main(String[] args) { Stri ...

  9. IIC简介(转载)

    来自:https://www.cnblogs.com/zalebool/p/4214599.html IIC简介: IIC 即Inter-Integrated Circuit(集成电路总线),这种总线 ...

  10. 南阳 ACM16 矩形嵌套 动态规划

    矩形嵌套 时间限制:3000 ms  |           内存限制:65535 KB 难度:4   描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c, ...