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

时间:2023-03-08 18:12:24

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