python面向编程:类继承、继承案例、单继承下属性查找、super方法
一、类的继承
二、基于继承解决类与类的代码冗余问题
三、在单继承背景下属性的查找
四、super的方法
一、类的继承
1.什么是继承?
在程序中继承是一种新建子类的方法的方式,新创建的类成为子类\派生类,被继承的类称之
父类\基类\超类,继承描述的是一种遗传关系,子类可以重用父类的功能和属性。
2.为何用继承?
介绍类与类之间的代码冗余问题。
3.如何继承?
先抽象在继承。
class Parent1(object):passclass Parent2:passclass Sub1(Parent1):# 括号是被继承的类,称为父类passclass 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=nameself.age=ageself.gender=genderclass 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 = levelself.salary = salarydef score(self,stu,num):stu.num = numprint("老师%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
无论是新式类还是经典类属性查找顺序都是一样:
会按照从左到右的顺序一个一个分支的找下去
在多继承背景下,如果一个子类继承了多个分支,当时多个分支最终汇聚到一个非onject类
(菱形继承问题)
#新式类:广度优先查找: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'passclass F(G):xxx='F'passclass B(E):xxx='B'passclass C(F):xxx='C'passclass D(G):xxx='D'passclass A(B,C,D):xxx='A'passprint(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__)
转载于:https://www.cnblogs.com/wuzhengzheng/p/9838408.html
python面向编程:类继承、继承案例、单继承下属性查找、super方法相关推荐
- 【轻松学】Python面向对象编程——类的设计、基础语法、继承、多态、类属性和类方法、单例设计
文章目录 1. 类的设计 大驼峰命名法 1.1 类名的确定 1.2 属性和方法的确定 练习 1.1 练习 1.2 2. 面相对象基础语法 2.1 定义简单的类(只包含方法) 2.1.1 定义只包含方法 ...
- python代码学习——类与对象提升(继承、超继承,类的例题,魔术方法)
python代码学习--类与对象提升 继承 继承的特殊属性: 代码示例 方法的重写和覆盖(overrrid) 总结 超继承 继承中的初始化 多继承 例题 类的魔术方法 哈希(hash)和eq方法 bo ...
- 6.12C++:继承基类的构造函数、单继承的构造函数、多继承的构造函数、派生类复制构造函数、派生类的析构函数
1 继承基类的构造函数 class A{public:A(){}; // A的构造函数 }; class B : public A{public:using A:A: } 2 单继承的构造函数 cla ...
- python编程例子-Python面向对象编程 - 类和实例
一.preface 面向对象编程OOP:object oriented programming. OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数.Python是一门面向对象的编程语 ...
- Python面向对象编程——类的学习
面向对象编程 面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向 ...
- python多个对象调用类方法、且之间有联系_趣味解读Python面向对象编程 (类和对象)...
一.面向对象简介 考虑现实生活中,我们的思维方式是放在学生这个个人上,是学生做了自我介绍.而不是像我们刚刚写出的代码,先有了介绍的行为,再去看介绍了谁. 用我们的现实思维方式该怎么用程序表达呢? 面向 ...
- python面向对象图片_趣味解读Python面向对象编程 (类和对象)
一.面向对象简介 考虑现实生活中,我们的思维方式是放在学生这个个人上,是学生做了自我介绍.而不是像我们刚刚写出的代码,先有了介绍的行为,再去看介绍了谁. 用我们的现实思维方式该怎么用程序表达呢?面向过 ...
- 详细讲解Python中继承内容之 单继承;(一)
文章目录 Python 面向对象的三大特征 初看继承 总结 Python 面向对象的三大特征 初看继承 继承的使用 总结
- python对象编程例子-python 面向对象编程 类和实例
class Student(object): #class后面紧接着是类名,即Student,类名通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下来的.通常,如果没有合适的继承 ...
最新文章
- 回顾Node文件路径
- USB Kill v2.0,一个可以瞬间烧毁电脑或平板的“U盘”
- pilt图像处理_Python用Pillow(PIL)进行简单的图像操作
- 诺依曼原理中计算机由运算器,冯诺依曼原理与计算机的基本组成
- 【机器学习】降维代码练习
- yaml for java_细数Java项目中用过的配置文件(YAML篇)
- mysql选中一行数据_获取table选中一行数据库
- Ubuntu下基本的命令总结
- hand keypoint detection in single images using multiview bootstrapping
- “人大女神”事件思考网络事件背后的教育文化
- 深入Node.js的模块机制
- 由两个曲面确定的交线的切向量求解
- 树的计数 Prufer序列+Cayley公式
- 德清租房软件测试,张家口商场附近出租房
- android项目修改名字(app名称),运行在移动设备和模拟器上的项目名字
- 2019中国产业互联网领袖峰会(上海)
- ALS算法原理和在音乐推荐上的应用
- UC搭档云计算:前景广阔
- 淘宝京东类电商评论标签化的思路
- 本科毕设课题之OJ开发(1)--评测机
热门文章
- CoinU基本概念分享(什么是去中心化钱包、助记词丢失怎么办等)
- 区块链学堂(5):Geth 安装
- JNI实现源码分析【三 间接引用表】
- AndroidL的checkPermission方法详解
- docker单一部署jenkins
- 如何启用计算机超级账户,Windows7启用超级管理员账户的方法
- Java连接open fire_java – 为什么我不能连接到openfire服务器?
- cnc加工中心保养表_CNC加工中心有哪些日常保养方法?
- TensorRT学习笔记4 - 运行sampleGoogleNet
- [USACO1.1]贪婪的送礼者Greedy Gift Givers