zoukankan      html  css  js  c++  java
  • 继承与派生

    '''
    # 1、什么是继承?
    # 继承一种新建类的的方式,在python中支持一个儿子继承多个爹
    # 新建的类称为子类或者派生类,
    # 父类又可以称为基类或者超类
    #
    # 子类会”遗传“父类的属性
    #
    # 2、为什么要用继承
    # 减少代码冗余
    #
    # 3、怎么用继承:
    # '''
    #
    # 单继承与多继承(ps:再项目中我们一般最常用的是单继承):
    # class ParentClass1:
    # pass
    #
    # class ParentClass2:
    # pass
    #
    # class SubClass1(ParentClass1): #单继承,括号内的类是基类,SubClass1是派生类。
    # pass
    #
    # class SubClass2(ParentClass1,ParentClass2):
    # pass


    # 查看从左边起第一个基类

    # print(SubClass2.__base__) #<class '__main__.ParentClass1'>

    # 查看所有基类

    # print(SubClass2.__bases__) #(<class '__main__.ParentClass1'>, <class '__main__.ParentClass2'>)

    # 如果没有指定基类则会默认继承object类,它是所有python类的基类。

    '''
    二、继承关系
    继承是类与类之间的关系,寻找这种关系需要先抽象再继承

    示例1中 把两个类中相同的部分单独建一个类(父类),创建子类时把父类导入。
    '''
    # 运用继承
    # 示例1:
    # class OidboyPepol:
    #
    # school='oldboy'
    #
    # def __init__(self,name,age,sex):
    # self.name=name
    # self.age=age
    # self.sex=sex
    #
    # class Teacher(OidboyPepol):
    # def change_score(self):
    # print('teacher %s is changing score '%self.name)
    #
    # class Student(OidboyPepol):
    # def choose(self):
    # print('stydent %s choose course ' % self.name)
    #
    # tel=Teacher('egon',18,'male')
    #
    # stu1=Student('alex',73,'female')

    # 基于继承看属性查找:
    # 新式类严格遵循这一原则!!
    # 查找顺序:自己名称空间—》 自己的类空间--》父类的名称空间—》object
    # 示例:
    # class Foo:
    # def f1(self):
    # print('Foo.f1')
    # def f2(self):
    # print('Foo.f2')
    # self.f1()

    # class Bar(Foo):
    # def f1(self):
    # print('Bar.f1')
    # obj=Bar()

    # obj.f1()

    # 派生:

    #子类定义自己新的属性,如果与父类同名,自类会以自己的为准。

    # class OldboyPeople:
    # school = 'oldboy'
    #
    # def __init__(self, name, age, sex):
    # self.name = name
    # self.age = age
    # self.sex = sex
    #
    # def f1(self):
    # print('爹的f1')
    #
    #
    # class OldboyTeacher(OldboyPeople):
    # def change_score(self):
    # print('teacher %s is changing score' %self.name)
    #
    # def f1(self):
    # print('儿子的f1')
    #
    # tea1 = OldboyTeacher('egon', 18, 'male')
    # tea1.f1() #儿子的f1




    # 在子类派生出的新方法中重用父类的功能
    #方式一:指名道姓地调用(其实与继承没有什么关系的)
    # OldboyPeople.__init__(self,name, age, sex)

    # class OldboyPeople:
    # school = 'oldboy'
    #
    # def __init__(self, name, age, sex):
    # self.name = name
    # self.age = age
    # self.sex = sex
    #
    # def tell_info(self):
    # print("""
    # ===========个人信息==========
    # 姓名:%s
    # 年龄:%s
    # 性别:%s
    # """ %(self.name,self.age,self.sex))
    #
    #
    # class OldboyTeacher(OldboyPeople):
    # # tea1,'egon', 18, 'male', 9, 3.1
    # def __init__(self, name, age, sex, level, salary):
    # # self.name = name
    # # self.age = age
    # # self.sex = sex
    # OldboyPeople.__init__(self,name, age, sex)
    #
    # self.level = level
    # self.salary = salary
    #
    # def tell_info(self):
    # OldboyPeople.tell_info(self)
    # print("""
    # 等级:%s
    # 薪资:%s
    # """ %(self.level,self.salary))
    #
    # tea1 = OldboyTeacher('egon', 18, 'male', 9, 3.1)
    # # print(tea1.name, tea1.age, tea1.sex, tea1.level, tea1.salary)
    #
    #
    # tea1.tell_info()



    #方式二:super()调用(严格依赖于继承)
    #super()的返回值是一个特殊的对象,该对象专门用来调用父类中的属性

    #了解:在python2中,需要super(自己的类名,self)
    # class OldboyPeople:
    # school = 'oldboy'
    #
    # def __init__(self, name, age, sex):
    # self.name = name
    # self.age = age
    # self.sex = sex
    #
    # def tell_info(self):
    # print("""
    # ===========个人信息==========
    # 姓名:%s
    # 年龄:%s
    # 性别:%s
    # """ %(self.name,self.age,self.sex))
    #
    #
    # class OldboyTeacher(OldboyPeople):
    # # tea1,'egon', 18, 'male', 9, 3.1
    # def __init__(self, name, age, sex, level, salary):
    # # OldboyPeople.__init__(self,name, age, sex)
    # super(OldboyTeacher,self).__init__(name,age,sex)
    #
    # self.level = level
    # self.salary = salary
    #
    # def tell_info(self):
    # # OldboyPeople.tell_info(self)
    # super().tell_info()
    # print("""
    # 等级:%s
    # 薪资:%s
    # """ %(self.level,self.salary))
    #
    # tea1 = OldboyTeacher('egon', 18, 'male', 9, 3.1)
    # # print(tea1.name, tea1.age, tea1.sex, tea1.level, tea1.salary)
    # tea1.tell_info()


    '''
    1、新式类:
    继承object的类,以及该类的子类,都是新式类

    在python3中,如果一个类没有指定继承的父类,默认就继承object
    所以说python3中所有的类都是新式类

    2、经典类(只有在python2才区分经典类与新式类):
    没有继承object的类,以及该类的子类,都是经典类


    在菱形继承的背景下,查找属性
    1、经典类:深度优先
    2、新式类:广度优先

    '''

    # class A:
    # def test(self):
    # print('from A')
    # pass

    # class B(A):
    # def test(self):
    # print('from B')
    # pass

    # class C(A):
    # def test(self):
    # print('from C')
    # pass
    # class D(B):
    # def test(self):
    # print('from D')
    # pass

    # class E(C):
    # def test(self):
    # print('from E')
    # pass
    #
    # class F(D,E):
    # def test(self):
    # print('from F')
    # pass
    # f1=F()
    # f1.test()

    # F->D->B->E->C-A->object

    # print(F.mro())











    # class OidboyPepol:
    #
    # school='oldboy'
    #
    # def __init__(self,name,age,sex):
    # self.name=name
    # self.age=age
    # self.sex=sex
    #
    # class Teacher(OidboyPepol):
    # def __init__(self,name,age,sex,level,salary):
    #
    # self.level=level
    # self.salary=salary
    # super().__init__(name,age,sex)
    # def change_score(self):
    # print('teacher %s is changing score '%self.name)
    #
    # class Student(OidboyPepol):
    # def choose(self):
    # print('stydent %s choose course ' % self.name)
    #
    # tel=Teacher('egon',18,'male',9,3.1)
    # print(tel.name,tel.sex,tel.age,tel.level,tel.salary)
    # stu1=Student('alex',73,'female')


















  • 相关阅读:
    【LeetCode】Validate Binary Search Tree ——合法二叉树
    协程(Coroutine)并不是真正的多线程(转)
    转: Android 软件开发之如何使用Eclipse Debug调试程序详解(七)
    转: eclipse 快捷键列表(功能清晰版本)
    电商初级技术方案探讨
    转: Vue.js——60分钟组件快速入门(上篇)
    音视频推荐书籍
    md5sum使用注意事项
    转: java DES的算法片码
    ant 命令学习详解
  • 原文地址:https://www.cnblogs.com/yangwei666/p/8808052.html
Copyright © 2011-2022 走看看