python面向编程:类继承、继承案例、单继承下属性查找、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方法的更多相关文章
- C++中的类继承(4)继承种类之单继承&多继承&菱形继承
单继承是一般的单一继承,一个子类只 有一个直接父类时称这个继承关系为单继承.这种关系比较简单是一对一的关系: 多继承是指 一个子类有两个或以上直接父类时称这个继承关系为多继承.这种继承方式使一个子类可 ...
- 对Java不能多继承,只能单继承,却可以实现多个接口的理解
1.java与C++的不同点在于多继承. Java:不能多继承,只能单继承,但可以实现多个接口 C++:可以实现多继承.例如: class A extends B implements C,D,E { ...
- 继承及属性查找+super()和mro()+多态
继承及属性查找+super()和mro()+多态 一. ★继承 1. 什么是继承? 继承就是新建类的一种方式,新建的类我们称为子类或者叫派生类,被继承的类我们称为父类或者基类 子类可以使用父类中的属性 ...
- Python面向对象编程-类的封装,继承、多态
面向对象是一种程序设计思想,对象作为程序基本单元,包含了数据和操作数据的函数. 面向对象的三大特点--数据封装.多态和继承. #类的创建,class关键字,类名大写,object表示从哪个类继承而来, ...
- python学习 day20 (3月27日)----(单继承多继承c3算法)
继承: 提高代码的重用性,减少了代码的冗余 这两个写法是一样的 Wa('青蛙').walk() #青蛙 can walk wa = Wa('青蛙') wa.walk() #青蛙 can walk 1. ...
- python面向编程:面向对象、init、绑定方法、案例练习
一.类的定义 二.面向对象概念三.对象的使用四.__init__函数的使用五.绑定方法六.面向对象联系 一.类的定义 1.什么叫做类? 类就是分类,类型的意思,一堆具备相同特征和行为的事物的抽象概念 ...
- python面向编程:类的组合、封装、property装饰器、多态
一.组合 二.封装 三.propert装饰器 四.多态 一.组合 ''' 1. 什么是组合 一个对象的属性是来自于另外一个类的对象,称之为组合 2. 为何用组合 组合也是用来解决类与类代码冗余的问题 ...
- python基础编程——类和实例
在了解类和实例之前,需要先了解什么是面向对象,什么又是面向过程.面向过程是以过程为中心实现一步步操作(相互调用,类似流水线思想):面向对象是以事物为中心,某个事物可以拥有自己的多个行为,而另一个事物也 ...
- python面向编程: 常用模块补充与面向对象
一.常用模块 1.模块 的用用法 模块的相互导入 绝对导入 从sys.path (项目根目录)开始的完整路径 相对导入 是指相对于当前正在执行的文件开始的路径 只能用于包内模块相互间导入 不能超过顶层 ...
随机推荐
- androidstudio出包问题--Warning: there were 1 unresolved references to classes or interfaces.
问题:存在unresolved的类或接口导致打包失败 Warning: there were 1 unresolved references to classes or interfaces. You ...
- jQuery之替换节点
如果要替换节点,jQuery提供了两个方法:replaceWith()和replaceAll(). 两个方法的作用相同,只是操作颠倒了. 作用:将所有匹配的元素都替换成指定的HTML或者DOM元素.( ...
- C学习笔记-字符串处理函数
字符串函数是最问常用的库函数之一,本文整理了常用的字符串函数,其来源为互联网 函数名: stpcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, ...
- 深入理解C语言-函数指针
函数指针在C++中有着重要的应用,函数的函数名其本质就是代表一个地址,这个地址叫做函数入口,得到这个地址就可以对这个函数进行各种操作. 函数类型基础 函数三要素: 名称.参数.返回值 C语言中的函数有 ...
- Android MVC MVP MVVM (三)
MVVM Model-View-ViewModel的简写 在MVP基础上实现数据视图的DataBinding,数据变化,视图自动变化,反之也成立. DataBinding 启用DataBinding ...
- python录音并调用百度语音识别接口
#!/usr/bin/env python import requests import json import base64 import pyaudio import wave import os ...
- (模板)hdoj5977 Garden of Eden(点分治)
题目链接:https://vjudge.net/problem/HDU-5977 题意:给一颗树,每个结点上有一个权值a[i],a[i]<=10,求有多少条路径满足这条路径上所有权值的结点都出现 ...
- Linux多线程编程 - sleep 和 pthread_cond_timedwait
#include <stdio.h> #include <stdlib.h> int flag = 1; void * thr_fn(void * arg) { while ...
- odoo10实现单点登陆绕过登陆集成页面
背景:由于需要集成odoo平台在其他页面,需要绕开登陆. 解决办法:开辟一个自动登陆的路由用与集成页面. 1.修改web模块中controller/main.py文件,在class名字为Home中添加 ...
- 【LOJ】#3120. 「CTS2019 | CTSC2019」珍珠
LOJ3120 52pts \(N - D >= 2M\)或者\(M = 0\)那么就是\(D^{N}\) 只和数字的奇偶性有关,如果有k个奇数,那么必须满足\(N - k >= 2M\) ...