一、类的继承

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

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

四、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方法相关推荐

  1. 【轻松学】Python面向对象编程——类的设计、基础语法、继承、多态、类属性和类方法、单例设计

    文章目录 1. 类的设计 大驼峰命名法 1.1 类名的确定 1.2 属性和方法的确定 练习 1.1 练习 1.2 2. 面相对象基础语法 2.1 定义简单的类(只包含方法) 2.1.1 定义只包含方法 ...

  2. python代码学习——类与对象提升(继承、超继承,类的例题,魔术方法)

    python代码学习--类与对象提升 继承 继承的特殊属性: 代码示例 方法的重写和覆盖(overrrid) 总结 超继承 继承中的初始化 多继承 例题 类的魔术方法 哈希(hash)和eq方法 bo ...

  3. 6.12C++:继承基类的构造函数、单继承的构造函数、多继承的构造函数、派生类复制构造函数、派生类的析构函数

    1 继承基类的构造函数 class A{public:A(){}; // A的构造函数 }; class B : public A{public:using A:A: } 2 单继承的构造函数 cla ...

  4. python编程例子-Python面向对象编程 - 类和实例

    一.preface 面向对象编程OOP:object oriented programming. OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数.Python是一门面向对象的编程语 ...

  5. Python面向对象编程——类的学习

    面向对象编程     面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向 ...

  6. python多个对象调用类方法、且之间有联系_趣味解读Python面向对象编程 (类和对象)...

    一.面向对象简介 考虑现实生活中,我们的思维方式是放在学生这个个人上,是学生做了自我介绍.而不是像我们刚刚写出的代码,先有了介绍的行为,再去看介绍了谁. 用我们的现实思维方式该怎么用程序表达呢? 面向 ...

  7. python面向对象图片_趣味解读Python面向对象编程 (类和对象)

    一.面向对象简介 考虑现实生活中,我们的思维方式是放在学生这个个人上,是学生做了自我介绍.而不是像我们刚刚写出的代码,先有了介绍的行为,再去看介绍了谁. 用我们的现实思维方式该怎么用程序表达呢?面向过 ...

  8. 详细讲解Python中继承内容之 单继承;(一)

    文章目录 Python 面向对象的三大特征 初看继承 总结 Python 面向对象的三大特征 初看继承 继承的使用 总结

  9. python对象编程例子-python 面向对象编程 类和实例

    class Student(object): #class后面紧接着是类名,即Student,类名通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下来的.通常,如果没有合适的继承 ...

最新文章

  1. 回顾Node文件路径
  2. USB Kill v2.0,一个可以瞬间烧毁电脑或平板的“U盘”
  3. pilt图像处理_Python用Pillow(PIL)进行简单的图像操作
  4. 诺依曼原理中计算机由运算器,冯诺依曼原理与计算机的基本组成
  5. 【机器学习】降维代码练习
  6. yaml for java_细数Java项目中用过的配置文件(YAML篇)
  7. mysql选中一行数据_获取table选中一行数据库
  8. Ubuntu下基本的命令总结
  9. hand keypoint detection in single images using multiview bootstrapping
  10. “人大女神”事件思考网络事件背后的教育文化
  11. 深入Node.js的模块机制
  12. 由两个曲面确定的交线的切向量求解
  13. 树的计数 Prufer序列+Cayley公式
  14. 德清租房软件测试,张家口商场附近出租房
  15. android项目修改名字(app名称),运行在移动设备和模拟器上的项目名字
  16. 2019中国产业互联网领袖峰会(上海)
  17. ALS算法原理和在音乐推荐上的应用
  18. UC搭档云计算:前景广阔
  19. 淘宝京东类电商评论标签化的思路
  20. 本科毕设课题之OJ开发(1)--评测机

热门文章

  1. CoinU基本概念分享(什么是去中心化钱包、助记词丢失怎么办等)
  2. 区块链学堂(5):Geth 安装
  3. JNI实现源码分析【三 间接引用表】
  4. AndroidL的checkPermission方法详解
  5. docker单一部署jenkins
  6. 如何启用计算机超级账户,Windows7启用超级管理员账户的方法
  7. Java连接open fire_java – 为什么我不能连接到openfire服务器?
  8. cnc加工中心保养表_CNC加工中心有哪些日常保养方法?
  9. TensorRT学习笔记4 - 运行sampleGoogleNet
  10. [USACO1.1]贪婪的送礼者Greedy Gift Givers