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的设计之美,给人一种清爽的感觉!

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. FastReport.Net使用:[10]报表栏目说明

    报表栏目说明 报表标题(Report Title):在每个报表的开始时打印. 报表合计区(Report Summary):在报表结尾时打印,显示在最后一行数据后,页脚前. 页眉(Page Header ...

  2. 【BZOJ 4380】4380: [POI2015]Myjnie (区间DP)

    4380: [POI2015]Myjnie Description 有n家洗车店从左往右排成一排,每家店都有一个正整数价格p[i].有m个人要来消费,第i个人会驶过第a[i]个开始一直到第b[i]个洗 ...

  3. 又见Python<1>:使用Anaconda搭建Python开发环境(Windows7)

    1.为什么选择Anaconda? Anaconda解决了Python使用痛点. Python好用但是令人头疼的就是库管理与Python不同版本的问题,特别是Windows环境下. 2.什么是Anaco ...

  4. [HAOI2015]数组游戏

    题目大意: 有一排n个格子,每个格子上都有一个白子或黑子,在上面进行游戏,规则如下: 选择一个含白子的格子x,并选择一个数k,翻转x,2x,...,kx格子上的子. 不能操作者负. 思路: 将“某个格 ...

  5. NOIP200606金明的预算方案

    试题描述: 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”. ...

  6. arguments对象与Rest参数

    JavaScript函数可以使用任意数量的参数.与其他语言(如C#和Java)不同,你可以在调用JavaScript函数时传递任意数量的参数.JavaScript函数允许未知数量的函数参数.在ECMA ...

  7. Linux下ip route、ip rule、iptables的关系(转)

    1.基础知识 1.1 路由 (Routing) 1.1.1 路由策略 (使用 ip rule 命令操作路由策略数据库) 基于策略的路由比传统路由在功能上更强大,使用更灵活,它使网络管理员不仅能够根据目 ...

  8. ted飞行器

    http://v.youku.com/v_show/id_XNTc0MTk0MzI4.html

  9. Spring JdbcTemplate查询实例

    这里有几个例子向您展示如何使用JdbcTemplate的query()方法来查询或从数据库提取数据.整个项目的目录结构如下: 1.查询单行数据 这里有两种方法来查询或从数据库中提取单行记录,并将其转换 ...

  10. RxJava 中文文档

    https://mcxiaoke.gitbooks.io/rxdocs/content/Subject.html