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

一:多继承性

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

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

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

  1. # python 多继承
  2. class Person: #声明人类
  3. def __init__(self, name, age):
  4. self.name = name
  5. self.age = age
  6. print('create people:', name, age)
  7. p1 = Person('Jerry',13)
  8. #输出:
  9. #
  10. # create people: Jerry 13
  11.  
  12. class Student(Person): #学生类
  13. def __init__(self,name,age,school):
  14. Person.__init__(self,name,age) #先调用父类的初始化方法
  15. self.school = school
  16. print("his School is",school)
  17. stu1 = Student('Tom',20,"Beijing")
  18. ##输出
  19. # create people: Tom 20
  20. # his School is Beijing
  21.  
  22. class Course: #创建课程类
  23. def __init__(self,course):
  24. self.course = course
  25. print('has the course ',course)
  26. cus1 = Course('Python')
  27. ##输出
  28. # has the course Python
  29.  
  30. class College(Student,Course): #创建大学生类,继承学生类,课程类
  31. def __init__(self,name,age,school,course,depart):
  32. Student.__init__(self,name,age,school) #同样先初始化父类方法
  33. Course.__init__(self,course)
  34. self.depart = depart;
  35. print("the college depart is",depart)
  36.  
  37. college1 = College("小明",18,"清华大学",'在学习Python','专业网络工程')
  38.  
  39. ## 输出结果
  40. # create people: 小明 18
  41. # his School is 清华大学
  42. # has the course 在学习Python
  43. # the college depart is 专业网络工程

二:Python 多态

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

  1. class BMWCar: #宝马汽车类
  2. def __init__(self):
  3. print("买辆宝马汽车")
  4. def drive(self): #汽车有行驶的方法
  5. print('试驾BMW')
  6.  
  7. class BenzCar: #奔驰汽车类
  8. def __init__(self):
  9. print('买了辆奔驰汽车')
  10. def drive(self):
  11. print('试驾奔驰')
  12.  
  13. class TeslaCar: #特斯拉汽车,未在国内上市,不提供试驾
  14. def __init__(self):
  15. print('该汽车还没上市') #买不到该汽车
  16.  
  17. class Person: #人类
  18. def driveCar(self,car): #试驾汽车
  19. car.drive()
  20.  
  21. #让人去试驾汽车
  22. #买车
  23. bmw = BMWCar()
  24. benzi = BenzCar()
  25. tesla= TeslaCar()
  26. #试驾
  27. onePerson = Person()
  28. onePerson.driveCar(bmw)
  29. onePerson.driveCar(benzi)
  30. onePerson.driveCar(tesla)
  31.  
  32. ##输出结果
  33. # 买辆宝马汽车
  34. # 买了辆奔驰汽车
  35. # 该汽车还没上市
  36. # 试驾BMW
  37. # 试驾奔驰
  38.  
  39. #可以看到上述结果,宝马、奔驰都能试驾;特斯拉不能试驾

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

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

Python 面向对象编程 继承 和多态的更多相关文章

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

    <基本定义>     在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超 ...

  2. Python面向对象编程——继承与派生

    Python面向对象编程--继承与派生 一.初始继承 1.什么是继承 继承指的是类与类之间的关系,是一种什么"是"什么的关系,继承的功能之一就是用来解决代码重用问题. 继承是一种创 ...

  3. python面向对象编程 继承 组合 接口和抽象类

    1.类是用来描述某一类的事物,类的对象就是这一类事物中的一个个体.是事物就要有属性,属性分为 1:数据属性:就是变量 2:函数属性:就是函数,在面向对象里通常称为方法 注意:类和对象均用点来访问自己的 ...

  4. Python面向对象:继承和多态

    继承与多态简介: 继承可以把父类的所有功能都直接拿过来,这样就不必重零做起,子类只需要新增自己特有的方法,也可以把父类不适合的方法覆盖重写. 动态语言的鸭子类型特点决定了继承不像静态语言那样是必须的. ...

  5. Python实用笔记 (20)面向对象编程——继承和多态

    当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Base class.Super class). ...

  6. python 面向对象(三)--继承和多态

    在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Base class.Supe ...

  7. python 面向对象四 继承和多态

    一.继承 class Animal(object): def run(self): print('Animal is running...') class Dog(Animal): def run(s ...

  8. python -- 面向对象编程(继承、重写)

    一.继承 子类可以继承父类的所有公有成员,但不能直接访问父类的私有成员,只能通过父类的公有方法间接访问私有属性或私有方法. 如: class DerviedClassName(BaseClassNam ...

  9. python面向对象(封装,继承,多态)

    python面向对象(封装,继承,多态) 学习完本篇,你将会深入掌握 如何封装一个优雅的借口 python是如何实现继承 python的多态 封装 含义: 1.把对象的属性和方法结合成一个独立的单位, ...

随机推荐

  1. [CC-CHEFGRPH]Time to Study Graphs with Chef

    [CC-CHEFGRPH]Time to Study Graphs with Chef 题目大意: 一个有向图可以分成\(n+2(n\le10^{12})\)层,第\(0\)层和第\(n+1\)层有\ ...

  2. ACM -- 算法小结(一)利用数组存放实现排序

    利用数组存放实现排序    hodj1425   321MS   2011/08 题意:输入n个数字,要求输出从大到小排序的前m个数 解题技巧:利用大数存储在数组后面,小数存储在前面,倒序输出完成从大 ...

  3. 【原】Eclipse更改字符编码,精华版

  4. HDU 5293 Annoying problem 树形dp dfs序 树状数组 lca

    Annoying problem 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5293 Description Coco has a tree, w ...

  5. 2015 UESTC 搜索专题F题 Eight Puzzle 爆搜

    Eight Puzzle Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/61 ...

  6. CAShapeLayer实现音量大小动态改变

    我是效果图 实现如图这效果一般会直接通过多张图进行切换进行完成.但这样的处理,会浪费App的资源存储空间,而且效率也不高.那么今天我们用CAShapeLayer实现以下吧. 拆分: 1.一个椭圆 2. ...

  7. SVN 服务器搭建及使用 一

    SVN服务器搭建和使用(一) Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 首先来下载和搭建SVN服务器. 现在Subversion已经迁移到apache网站上 ...

  8. GitHub官方Markdown语法教程

    说明:Markdown随着编译器不一样,语法也都不一样,但这份GitHub提供的官方教程,基本学会这份就够了. https://guides.github.com/features/mastering ...

  9. 自定义的tabBarController的几种方法

    本文转载自:http://blog.sina.com.cn/s/blog_79c5bdc30100t88i.html 我自己实现的一种可以很方便的实现更换TabBarController图片的方法,代 ...

  10. 01-03-01【Nhibernate (版本3.3.1.4000) 出入江湖】id标签的unsaved-value属性

    父表 <class name="Model.Customer, Model" discriminator-value="0"> <!--uns ...