Python是一门面向对象语言
面向对象的三大特征:封装、继承、多态
我们这里来看一下python 类的继承
通过继承创建的新类称为子类或派生类,被继承的类称为基类、父类或超类。
一:类的继承
1 :继承语法
class 派生类名(基类名)
...
通常我们定义的类没有指定继承对象都是继承自object类,另外,python是支持多继承的。
下边我们使用代码来演示一下python的继承:
我们定义一个person类,其中有name、age两个属性,getInfo方法,为父类。
我们定义一个school类,其中getSchoolInfo方法,为父类。
定义一个teacher类,继承person、school类,其中有name、age、teacherNumber
三个属性
定义一个student类,继承person、school类。其中有name、age、studentNumber三个属性
上代码:
class Person(object):
"""
person类
"""
# 姓名
name = ''
# 年龄
age = ''
# 构造函数
def __init__(self, name, age):
self.name = name
self.age = age
# 获取信息
def getInfo(self):
li = {'name' : self.name, 'age' : self.age}
print('姓名为:', self.name, "年龄为:", self.age)
class School(object):
"""
school类
"""
type = ''
# 获取信息
def getSchoolInfo(self):
print("我在时间里的大学")
class Teacher(Person, School):
"""
教师类,继承person类
"""
# 姓名
name = ''
# 年龄
age = ''
# 教工号
teacherNumber = ''
# 构造函数
def __init__(self, name, age, teacherNumber):
self.name = name
self.age = age
self.teacherNumber = teacherNumber
class Student(Person, School):
"""
教师类,继承person类
"""
# 姓名
name = ''
# 年龄
age = ''
# 学生号
studentNumber = ''
# 构造函数
def __init__(self, name, age, studentNumber):
self.name = name
self.age = age
self.studentNumber = studentNumber
调用:
S = Student('张三', 15, '20210101')
S.getInfo()
S.getSchoolInfo()
T = Teacher('李四', 35, 5)
T.getInfo()
S.getSchoolInfo()
输出:
姓名为: 张三 年龄为: 15
我在时间里的大学
姓名为: 李四 年龄为: 35
我在时间里的大学
上边的代码我们演示了python基本的继承与多继承,子类分别调用了父类person中的getInfo方法,School中的getSchoolInfo方法
但是,因为父类person中的getinfo方法只能打印名字和年龄。
但是学生还有学号,教师还有工龄需要输出,那么我们就需要用到下边的方法重写。
二:方法重写
Python中类的方法的重写比较简单
直接在子类中声明与父类中的方法名相同的方法即可。
使用上边的代码,person类与school类中的代码不变
class Teacher(Person, School):
"""
教师类,继承person类
"""
# 姓名
name = ''
# 年龄
age = ''
# 教工号
teacherNumber = ''
# 构造函数
def __init__(self, name, age, teacherNumber):
self.name = name
self.age = age
self.teacherNumber = teacherNumber
# 获取信息
def getInfo(self):
li = {'name': self.name, 'age': self.age}
print('姓名为:', self.name, "年龄为:", self.age, "教工号为:", self.teacherNumber)
class Student(Person, School):
"""
教师类,继承person类
"""
# 姓名
name = ''
# 年龄
age = ''
# 学生号
studentNumber = ''
# 构造函数
def __init__(self, name, age, studentNumber):
self.name = name
self.age = age
self.studentNumber = studentNumber
# 获取信息
def getInfo(self):
li = {'name': self.name, 'age': self.age}
print('姓名为:', self.name, "年龄为:", self.age, "学号为:", self.studentNumber)
S = Student('张三', 15, '20210101')
S.getInfo()
S.getSchoolInfo()
T = Teacher('李四', 35, 5)
T.getInfo()
S.getSchoolInfo()
输出:
姓名为: 张三 年龄为: 15 学号为: 20210101
我在时间里的大学
姓名为: 李四 年龄为: 35 教工号为: 5
我在时间里的大学
三:类的多态
Python是一门动态语言
静态语言与动态语言的区别:
静态语言和动态语言关于多态的区别 。静态语言实现多态的三个必要条件
1. 继承
2. 方法重写
3. 父类引用指向子类对象
动态语言的多态崇尚“鸭子类型"当看到一只鸟走起来像鸭子、游泳起来像鸭子、 收起来也像鸭子,那么这只鸟就可以被称为鸭子。在鸭子类型中,不需要关心 对象是什么类型,到底是不是鸭子,只关心对象的行为。
下边我们使用一段代码来演示一下python的多态
# 父类 动物
class Animal:
def eat(self):
print("动物吃东西!")
# 子类 狗
class Dog(Animal):
def eat(self):
print("吃肉!")
# 子类 猴
class Monkey(Animal):
def eat(self):
print("吃香蕉!")
# 父类 人
class Person(object):
def eat(self):
print("吃五谷杂粮!")
# 定义一个函数 参数是一个对象
def fun(obj):
obj.eat()
fun(Dog())
fun(Monkey())
fun(Person())
输出:
吃肉!
吃香蕉!
吃五谷杂粮!
上边的代码我们定义了一个animal父类,定义了一个Dog,Monkey子类继承animal
我们又定义了一个person类
相同的是,这个类中都是有eat方法的
我们有定义了一个函数,传入参数是一个对象,函数内部调用了对象中的eat方法
这个就对上了我们上边说的鸭子类型。
有好的建议,请在下方输入你的评论。