博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python面向编程:类继承、继承案例、单继承下属性查找、super方法
阅读量:5278 次
发布时间:2019-06-14

本文共 2699 字,大约阅读时间需要 8 分钟。

一、类的继承

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

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

四、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=name        self.age=age        self.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 = 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

  无论是新式类还是经典类属性查找顺序都是一样:
  会按照从左到右的顺序一个一个分支的找下去

  在多继承背景下,如果一个子类继承了多个分支,当时多个分支最终汇聚到一个非onject类

  (菱形继承问题)

#新式类:广度优先查找:obj->A->B->E->C->F->D->G->object# 经典类:深度优先查找:obj->A->B->E->G->C->F->Dclass 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

你可能感兴趣的文章
沧海一声笑,移动应用的CRASH原因我找到! --记最新款数字化測试“星云測试“的使用攻略...
查看>>
常见浏览器兼容性问题与解决方式
查看>>
推荐系统依据近期浏览进行推荐
查看>>
工厂模式IDAL具体解释
查看>>
UVA - 673 Parentheses Balance
查看>>
数据库编程规范
查看>>
如何修改eclipse里面Android虚拟机的存放路径
查看>>
爬虫作业
查看>>
微软职位内部推荐-Senior Software Engineer
查看>>
c++11 智能指针 unique_ptr、shared_ptr与weak_ptr
查看>>
JavaScript跨域总结与解决办法(转)
查看>>
正则匹配
查看>>
关于架构的思考
查看>>
poj 1149 PIGS【最大流】
查看>>
Array.from()
查看>>
struts2+spring3+hibernate3整合(二)转载
查看>>
JVM-运行时数据区
查看>>
(解决)mysql1366中文显示错误的终极解决方案
查看>>
使用enterTextInWebElement处理qq授权页报“网络异常,请稍后再试”的解决方法
查看>>
beta冲刺3
查看>>