本文目录:

一、类的继承

二、基于继承解决类与类的代码冗余问题

三、在单继承背景下属性的查找

四、super的方法

一、类的继承

1.什么是继承?

  在程序中继承是一种新建子类的方法的方式,新创建的类成为子类\派生类,被继承的类称之
  父类\基类\超类,继承描述的是一种遗传关系,子类可以重用父类的功能和属性。

2.为何用继承?

  介绍类与类之间的代码冗余问题。

3.如何继承?

  先抽象在继承。

class Parent1(object):
pass class Parent2:
pass class Sub1(Parent1):# 括号是被继承的类,称为父类
pass class Sub2(Parent1,Parent2): # 一个类可以继承多个类,中间逗号分开
pass # Sub1\Sub2,都可以访问父类的功能和属性
print(Sub1.__bases__)
print(Sub2.__bases__) # 返回被实例化的类名
print(Parent1.__bases__)
print(Parent2.__bases__)

  

4.python2与python3的区别?

  新式类:但凡继承object类的子类,以及该子类的子子类,...都称之为新式类
  经典类:没有继承object类的子类,以及该子类的子子类,...都称之为经典类

    只有在Python2中采取分新式类与经典类

二、基于继承解决类与类的代码冗余问题

  在子类派生出的新功能如何重用父类的功能:
  指名道姓的访问某一个类中的函数,与继承无关

  

class OldboyPeople:
school = "Oldboy"
def __init__(self,name,age,gender):
self.name=name
self.age=age
self.gender=gender class OldboyStudent(OldboyPeople):
def __init__(self,name,age,gender): super(OldboyStudent, self).__init__(name,age,gender) def choose_cour(self):
print("%s is choose course"% self.name) class OldboyTeacher(OldboyPeople):
def __init__(self,name,age,gender,level,salary):
OldboyPeople.__init__(self,name,age,gender)
self.level = level
self.salary = salary def score(self,stu,num):
stu.num = num
print("老师%s 给学生 %s 打分%s"% (self.name,stu.name,num)) yyh =OldboyStudent("yyh",18,"male")
print(yyh.__dict__)
OldboyStudent.choose_cour(yyh) egon = OldboyTeacher("egon",28,"women",10,"50k")
print(egon.__dict__) egon.score(yyh,99)

三、在单继承背景下的属性查找

  在单继承背景下,无论是新式类还是经典类属性查找顺序都一样
  先obj--->类---->父类....

  在多继承背景下,如果一个类继承了多个分支,但是多个分支没有汇聚到一个非object
  无论是新式类还是经典类属性查找顺序都是一样:
  会按照从左到右的顺序一个一个分支的找下去

  在多继承背景下,如果一个子类继承了多个分支,当时多个分支最终汇聚到一个非object类
  (菱形继承问题)

#新式类:广度优先查找:obj->A->B->E->C->F->D->G->object
# 经典类:深度优先查找:obj->A->B->E->G->C->F->D
class G:
xxx='G' class E(G):
xxx='E'
pass class F(G):
xxx='F'
pass class B(E):
xxx='B'
pass class C(F):
xxx='C'
pass class D(G):
xxx='D'
pass class A(B,C,D):
xxx='A'
pass print(A.mro())

四、super方法

  在子类派生出的新功能中如何重用父类的功能
  方式一:指名道姓的访问某一类中的函数,与继承无关
  方式二:super(OldboyTeacher,self),在python3中super可以不用传参数,调用该函数会得到
  一个特殊的对象,该对象是专门用来访问父类中的属性。

  强调:super会严格参照类的mro列表依次查找属性

class OldboyPeople:
school = "Oldboy"
def __init__(self,name,age,gender):
self.name=name
self.age =age
self.gender=gender class OldboyTeacher(OldboyPeople):
def __init__(self,name,age,gender,level,salary):
super(OldboyTeacher,self).__init__(name,age,gender) self.level=level
self.salary=salary tea=OldboyTeacher("egon",18,"male",10,"50k")
print(tea.__dict__)

  

    

python面向编程:类继承、继承案例、单继承下属性查找、super方法的更多相关文章

  1. C++中的类继承(4)继承种类之单继承&多继承&菱形继承

    单继承是一般的单一继承,一个子类只 有一个直接父类时称这个继承关系为单继承.这种关系比较简单是一对一的关系: 多继承是指 一个子类有两个或以上直接父类时称这个继承关系为多继承.这种继承方式使一个子类可 ...

  2. 对Java不能多继承,只能单继承,却可以实现多个接口的理解

    1.java与C++的不同点在于多继承. Java:不能多继承,只能单继承,但可以实现多个接口 C++:可以实现多继承.例如: class A extends B implements C,D,E { ...

  3. 继承及属性查找+super()和mro()+多态

    继承及属性查找+super()和mro()+多态 一. ★继承 1. 什么是继承? 继承就是新建类的一种方式,新建的类我们称为子类或者叫派生类,被继承的类我们称为父类或者基类 子类可以使用父类中的属性 ...

  4. Python面向对象编程-类的封装,继承、多态

    面向对象是一种程序设计思想,对象作为程序基本单元,包含了数据和操作数据的函数. 面向对象的三大特点--数据封装.多态和继承. #类的创建,class关键字,类名大写,object表示从哪个类继承而来, ...

  5. python学习 day20 (3月27日)----(单继承多继承c3算法)

    继承: 提高代码的重用性,减少了代码的冗余 这两个写法是一样的 Wa('青蛙').walk() #青蛙 can walk wa = Wa('青蛙') wa.walk() #青蛙 can walk 1. ...

  6. python面向编程:面向对象、init、绑定方法、案例练习

    一.类的定义 二.面向对象概念三.对象的使用四.__init__函数的使用五.绑定方法六.面向对象联系 一.类的定义 1.什么叫做类? 类就是分类,类型的意思,一堆具备相同特征和行为的事物的抽象概念 ...

  7. python面向编程:类的组合、封装、property装饰器、多态

    一.组合 二.封装 三.propert装饰器 四.多态 一.组合 ''' 1. 什么是组合 一个对象的属性是来自于另外一个类的对象,称之为组合 2. 为何用组合 组合也是用来解决类与类代码冗余的问题 ...

  8. python基础编程——类和实例

    在了解类和实例之前,需要先了解什么是面向对象,什么又是面向过程.面向过程是以过程为中心实现一步步操作(相互调用,类似流水线思想):面向对象是以事物为中心,某个事物可以拥有自己的多个行为,而另一个事物也 ...

  9. python面向编程: 常用模块补充与面向对象

    一.常用模块 1.模块 的用用法 模块的相互导入 绝对导入 从sys.path (项目根目录)开始的完整路径 相对导入 是指相对于当前正在执行的文件开始的路径 只能用于包内模块相互间导入 不能超过顶层 ...

随机推荐

  1. C++ N叉树的实现

    引言 最近一个项目需要使用多叉树结构来存储数据,但是基于平时学习的都是二叉树的结构,以及网上都是二叉树为基础来进行学习,所以今天实现一个多叉树的数据结构. 理论基础 树和二叉树: 多叉树:多叉树,顾名 ...

  2. Unity3D热更新之LuaFramework篇[05]--Lua脚本调用c#以及如何在Lua中使用Dotween

    在上一篇文章 Unity3D热更新之LuaFramework篇[04]--自定义UI监听方法 中,我对LuaBehaviour脚本进行了扩展,添加了两个新的UI监听方法,也提到最好能单写一个脚本处理此 ...

  3. 【CodeForces - 682C】Alyona and the Tree(dfs)

    Alyona and the Tree Descriptions 小灵决定节食,于是去森林里摘了些苹果.在那里,她意外地发现了一棵神奇的有根树,它的根在节点 1 上,每个节点和每条边上都有一个数字. ...

  4. Eslint常用命令

    Eslint常用命令 自动修复(针对整个项目) npm run lint -- --fix 运行如上命令,eslint 会自动修复一些简单的错误. 全局安装 npm install -g eslint ...

  5. vs .net WebForm 模板添加注释

    首先说一点,好久不更新博客了.今天公司服务器不能用了,闲着没事儿,更新一篇博客. 今天要说的就是vs2010下,如何更改各种文件的模板,以省去每次新添加文件时,还得给文件添加文件标示注释等时间.很大程 ...

  6. SpringCloud学习(一)服务的注册与发现Eureka(Finchley版本)

    创建服务注册中心 在这里,我还是采用Eureka作为服务注册与发现的组件. 首先创建一个空项目 首先创建一个空项目,再创建一个maven项目,首先创建一个主Maven工程,在其pom文件引入依赖,sp ...

  7. freeRTOS学习二

    临界段,用一句话概括就是一段在执行时不能被中断的代码段. 临界段被打断的情况,一个是系统调度,还有一个就是外部中断. 对临界段的保护就是对中断的开和关. 空闲任务与阻塞延时 xTicksToDelay ...

  8. linux-关闭文件

    1.打开参考: http://q.cnblogs.com/q/39275/ http://hi.baidu.com/auxor/item/49b6e929fdf16dc7ed10f197 2.关闭参考 ...

  9. Vue常见问题集中

    a.VScode保持vue语法高亮的方式: 1.安装插件:vetur.打开VScode,Ctrl + P 然后输入 ext install vetur 然后回车点安装即可. 2.在 VSCode中使用 ...

  10. PTA (Advanced Level)1077.Kuchiguse

    The Japanese language is notorious for its sentence ending particles. Personal preference of such pa ...