继承可以分为但继承,多继承。

  1. 继承的基本形式
  2. class ParentClass1(object): #定义父类
  3. pass
  4.  
  5. class ParentClass2: #定义父类
  6. pass
  7.  
  8. class SubClass1(ParentClass1): #单继承,基类是ParentClass1,派生类是SubClass
  9. pass
  10.  
  11. class SubClass2(ParentClass1,ParentClass2): #python支持多继承,用逗号分隔开多个继承的类
  12. pass
  13.  
  14. print(SubClass1.__bases__) #显示他继承了几类
  15. print(SubClass2.__bases__)
  16. print(ParentClass1.__bases__)

经典类和新式类:

两者区别在python3中是没有区别的,都有有个继承,如果没定义继承,也会默认将object继承,都叫新式类。

两者的区别在python2才有区别,没有定义就是经典类,如果定义了继承就是新式类。

  1. class Animal:
  2. x=1
  3. def __init__(self,name,age,sex):
  4. self.name=name
  5. self.age=age
  6. self.sex=sex
  7. # print('Animal.__init__')
  8. def eat(self):
  9. print('%s eat' %self.name)
  10.  
  11. def talk(self):
  12. print('%s say' %self.name)
  13.  
  14. class People(Animal):
  15. x=10
  16. def __init__(self,name,age,sex,education):
  17. Animal.__init__(self,name,age,sex)
  18. self.education=education
  19. # print('People.__init__')
  20.  
  21. def talk(self):
  22. Animal.talk(self)
  23. print('这是人在说话')
  24.  
  25. class Dog(Animal):
  26. pass
  27. class Pig(Animal):
  28. pass
  29.  
  30. peo1=People('alex',18,'male','小学肄业')
  31. print(peo1.__dict__)
  32. peo1.talk()
  33. print(peo1.x)
  34.  
  35. dog1=Dog('yuanhao',28,'male')
  36. pig1=Pig('wupeiqi',18,'male')
  37.  
  38. print(peo1.name)
  39. print(dog1.name)
  40. print(pig1.name)

类的继承:

  1. class OldboyPeople:
  2. school = 'oldboy'
  3. def __init__(self,name,age,sex):
  4. self.name=name
  5. self.age=age
  6. self.sex=sex
  7.  
  8. def eat(self):
  9. print('is eating')
  10.  
  11. class OldboyStudent(OldboyPeople):
  12. def learn(self):
  13. print('%s is learning' %self.name)
  14.  
  15. class OldboyTeacher(OldboyPeople):
  16. def __init__(self,name,age,sex,salary,title):
  17. OldboyPeople.__init__(self,name,age,sex)
  18. self.salary=salary
  19. self.title=title
  20.  
  21. def teach(self):
  22. print('%s is teaching' %self.name)
  23.  
  24. yl_obj=OldboyStudent('yanglei',28,'female')
  25. egon_obj=OldboyTeacher('egon',18,'male',3.1,'沙河霸道金牌讲师')

总结;

1,继承功能之一:解决类与类之间代码重复

2,继承是类与类之间的关系,是一种,什么是什么的关系

3,在子类派生出新的属性,以自己的为准。

4,在子类派生出新的方法内重用弗雷的功能的方式:指名道姓

eg:OldboyPeople.__init__

  这种调用方法本身跟继承没有关系

继承实现的原理:

调用顺序:

单继承的话:如果执行的话先找自己的范围内,当没有的时候再去找父类。(就是不管怎么找,都是先从自身找齐)

  1. #单继承
  2. class A:
  3. def f1(self):
  4. print('A.f1')
  5.  
  6. def f2(self):
  7. print('A.f2')
  8. self.f1() #b.f1()
  9.  
  10. class B(A):
  11. def f1(self):
  12. print('B.f2')
  13.  
  14. b=B()
  15. # b.f2=111111
  16. b.f2()

多继承的话:

  1. #多继承
  2. class J:
  3. def test(self):
  4. print('J')
  5. class A(J):
  6. # def test(self):
  7. # print('A')
  8. pass
  9. class E(J):
  10. def test(self):
  11. print('E')
  12. pass
  13. class H(J):
  14. def test(self):
  15. print('H')
  16.  
  17. class G(H):
  18. def test(self):
  19. print('G')
  20. pass
  21. class B(A):
  22. # def test(self):
  23. # print('B')
  24. pass
  25. class D(E):
  26. def test(self):
  27. print('D')
  28. pass
  29. class F(G):
  30. def test(self):
  31. print('F')
  32. pass
  33. class C(B,D,F):
  34. # def test(self):
  35. # print('C')
  36. pass
  37.  
  38. c=C()
  39. # c.test=1111
  40. c.test()

#可以利用*.mro()来查看他的调用顺序

eg: print(c.mro())

Day7 类的继承和继承实现的原理的更多相关文章

  1. scala中的面向对象定义类,构造函数,继承

    我们知道scala中一切皆为对象,函数也是对象,数字也是对象,它是一个比java还要面向对象的语言. 定义scala的简单类 class Point (val x:Int, val y:Int) 上面 ...

  2. ECMAScript6 中 类的封装与继承

    ECMASCRIPT6中实现了class关键字,这样使我们更容易也更形象的进行类的操作 <script type="text/javascript"> class OF ...

  3. iOS 杂笔-24(常用类到NSObject的继承列表)

    iOS 杂笔-24(常用类到NSObject的继承列表) NSString NSObject->NSString NSArray NSObject->NSArray ↑OC基本类都直接继承 ...

  4. scala入门教程:scala中的面向对象定义类,构造函数,继承

    我们知道scala中一切皆为对象,函数也是对象,数字也是对象,它是一个比java还要面向对象的语言. 定义scala的简单类 class Point (val x:Int, val y:Int) 上面 ...

  5. java类为什么是单继承。类的继承,实现接口。

    java中提供类与类之间提供单继承. 提供多继承会可能出现错误,如:一个类继承了两个父类,而两个父类里面都有show()方法. class Fulei1{ public void show(){ Sy ...

  6. JAVA类与对象(七)------继承

    理解:继承可以理解为一个对象获取属性的过程.如果类A是类B的父类,而类B是类C的父类,我们也称C是A的子类,类C是从类A继承而来.    在java中,类的继承是单一继承,也就是说,一个子类只能拥有一 ...

  7. java中关于类的封装与继承,this、super关键字的使用

    原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/5454849.html. this关键字: this代表当前对象,它有以下几种用途: 1.本类 ...

  8. 实现Square类,让其继承自Rectangle类,并在Square类增添新属性和方法,在2的基础上,在Square类中重写Rectangle类中的初始化和打印方法

    实现Square类,让其继承自Rectangle类,并在Square类增添新属性和方法,在2的基础上,在Square类中重写Rectangle类中的初始化和打印方法 #import <Found ...

  9. 类和对象:继承 - 零基础入门学习Python038

    类和对象:继承 让编程改变世界 Change the world by program 上节课的课后作业不知道大家完成的怎样?我们试图模拟一个场景,里边有一只乌龟和十条鱼,乌龟通过吃鱼来补充体力,当乌 ...

随机推荐

  1. python脚本程序,传入参数*要用单引号'*'

    *号作为python脚本的传入参数时,必须用单引号'',才能正确传入.如python test.py 2014 '*' age python test.py 2014 * age是错误的. 比如 te ...

  2. matlab中 mcc/mbuild/mex 区别

    mcc 的作用是将 .m文件编译为 c/c++动态链接库文件,使你可以在 c/c++程序中使用 matlab的一些函数功能.mcc 也可以将.m文件编译为exe可执行文件. mex 的作用是将 c/c ...

  3. Spark SQL官方文档阅读--待完善

    1,DataFrame是一个将数据格式化为列形式的分布式容器,类似于一个关系型数据库表. 编程入口:SQLContext 2,SQLContext由SparkContext对象创建 也可创建一个功能更 ...

  4. Android必知必会-Handler可能引起的内存泄露

    在Android开发中,编写多线程通常会使用到Thread和Handler,细心的朋友会发现,很常见的写法会被编辑器提示有问题,new Handler(){} 内的代码背景颜色会变成黄色.Androi ...

  5. CSS中编写省略号代码片段

     #component-content #dtMain .dt-ul > li .component-item .component-name{ display:inline-block; ...

  6. Linux System Programming --Chapter Seven

    文件和目录管理 一.文件与其元数据 我们首先看一下一个简单的文本文件是怎么保存的: 打开vim,编辑一段文本: [root@localhost ~]# vim hello.txt 编辑内容如下: op ...

  7. mysql_建立索引的优缺点

    http://blog.csdn.net/superit401/article/details/51291603 建立索引的优缺点: 为什么要创建索引呢? 这是因为,创建索引可以大大提高系统的性能.  ...

  8. Android Studio使用Lint进行代码检查

    Android Studio目前已经更新到1.4版本,它作为Google官方推荐的IDE,功能非常强大,其中提供了一套静态代码分析工具,它可以帮助我们检查项目中存在的问题,让我们更有规范性的开发App ...

  9. iOS中NSBundle的介绍

    bundle是一个目录,其中包含了程序会使用到的资源.这些资源包含了如图像,声音,编译好的代码,nib文件(用户也会把bundle称为plug-in).对应bundle,cocoa提供了类NSBund ...

  10. C/C++内存布局及对齐

    1.源文件转换为可执行文件 源文件经过以下几步生成可执行文件: 1.预处理(preprocessor):对#include.#define.#ifdef/#endif.#ifndef/#endif等进 ...