zoukankan      html  css  js  c++  java
  • Python 面向对象编程 继承 和多态

    Python 面向对象编程 继承 和多态

    一:多继承性

      对于java我们熟悉的是一个类只能继承一个父类;但是对于C++ 一个子类可以有多个父亲,同样对于 Python一个类也可以有多个父亲

         格式: class 子类(父类1,父类2...):

      如代码:我们创建 人类,课程类,学生类继承人类,大学生类继承学生类和课程类,也就是说大学生类,有 学生类,课程类,人类等特性;

    # python 多继承
    class Person:  #声明人类
        def __init__(self, name, age):
            self.name = name
            self.age = age
            print('create people:', name, age)
    p1 = Person('Jerry',13)
    #输出:
    #
    #   create people: Jerry 13
    
    class Student(Person):  #学生类
        def __init__(self,name,age,school):
            Person.__init__(self,name,age)  #先调用父类的初始化方法
            self.school = school
            print("his School is",school)
    stu1 = Student('Tom',20,"Beijing")
    ##输出
    #   create people: Tom 20
    #   his School is Beijing
    
    class Course:   #创建课程类
        def __init__(self,course):
            self.course = course
            print('has the course ',course)
    cus1 = Course('Python')
    ##输出
    #   has the course  Python
    
    class College(Student,Course):  #创建大学生类,继承学生类,课程类
        def __init__(self,name,age,school,course,depart):
            Student.__init__(self,name,age,school)  #同样先初始化父类方法
            Course.__init__(self,course)
            self.depart = depart;
            print("the college depart is",depart)
    
    college1 = College("小明",18,"清华大学",'在学习Python','专业网络工程')
    
    ## 输出结果
    #   create people: 小明 18
    #   his School is 清华大学
    #   has the course  在学习Python
    #   the college depart is 专业网络工程

    二:Python 多态

       通常我们认为继承也是多态的和种,在java中的 接口和实现,在OC中的协议,这是一些对类的多态形式,那么 Python中有像Java那样的接口和实现,及OC中的分类,扩展等多态形式吗?,答案目前我认为是没有的,因为Python是一种弱类型的,解析型语言,但是一些不太容易看出来的多态形式,我们可以看下下面代码

    class BMWCar:   #宝马汽车类
        def __init__(self):
            print("买辆宝马汽车")
        def drive(self):    #汽车有行驶的方法
            print('试驾BMW')
    
    class BenzCar:  #奔驰汽车类
        def __init__(self):
            print('买了辆奔驰汽车')
        def drive(self):
            print('试驾奔驰')
    
    class TeslaCar:     #特斯拉汽车,未在国内上市,不提供试驾
        def __init__(self):
            print('该汽车还没上市')    #买不到该汽车
    
    class Person:   #人类
        def driveCar(self,car): #试驾汽车
            car.drive()
    
    #让人去试驾汽车
    #买车
    bmw = BMWCar()
    benzi = BenzCar()
    tesla= TeslaCar()
    #试驾
    onePerson = Person()
    onePerson.driveCar(bmw)
    onePerson.driveCar(benzi)
    onePerson.driveCar(tesla)
    
    ##输出结果
    #   买辆宝马汽车
    #   买了辆奔驰汽车
    #   该汽车还没上市
    #   试驾BMW
    #   试驾奔驰
    
    #可以看到上述结果,宝马、奔驰都能试驾;特斯拉不能试驾

    上面Person对象有个driveCar方法,传参数为一辆汽车,由于我们不知道汽车是什么 牌子的,所以这里是多态,什么车,执行什么车的方法,但是不是所有的车都能试驾,比如玩具车,哈哈

    关于Pthon的多态,我们不必太过于纠结,看上面Pthon的设计之美,给人一种清爽的感觉!

  • 相关阅读:
    Java对象的生命周期与作用域的讨论(转)
    [置顶] Oracle学习路线与方法
    Java实现 蓝桥杯 算法训练 未名湖边的烦恼
    Java实现 蓝桥杯 算法训练 未名湖边的烦恼
    Java实现 蓝桥杯 算法训练 未名湖边的烦恼
    Java实现 蓝桥杯 算法训练 最大的算式
    Java实现 蓝桥杯 算法训练 最大的算式
    Java实现 蓝桥杯 算法训练 最大的算式
    Java实现 蓝桥杯 算法训练 最大的算式
    Java实现 蓝桥杯 算法训练 最大的算式
  • 原文地址:https://www.cnblogs.com/cocoajin/p/3674076.html
Copyright © 2011-2022 走看看