Python(三十一)python类class继承与多态

简介: Python是一门面向对象语言面向对象的三大特征:封装、继承、多态我们这里来看一下python 类的继承通过继承创建的新类称为子类或派生类,被继承的类称为基类、父类或超类。一:类的继承1 :继承语法arduino复制代码class 派生类名(基类名) ... 通常我们定义的类没有指定继承对象都是继承自object类,另外,python是支持多继承的。下边我们使用代码来演示一下python的继承:我们定义一个person类,其中有name、age两个属性,getInfo方法,为父类。我们定义一个school类,其中getSchoolInfo方法,为父类。定义一

Python是一门面向对象语言

面向对象的三大特征:封装、继承、多态

我们这里来看一下python 类的继承

通过继承创建的新类称为子类或派生类,被继承的类称为基类、父类或超类。

一:类的继承

1:继承语法

arduino

复制代码

class 派生类名(基类名)
    ...

 

通常我们定义的类没有指定继承对象都是继承自object类,另外,python是支持多继承的。

下边我们使用代码来演示一下python的继承:

我们定义一个person类,其中有name、age两个属性,getInfo方法,为父类。

我们定义一个school类,其中getSchoolInfo方法,为父类。

定义一个teacher类,继承person、school类,其中有name、age、teacherNumber

三个属性

定义一个student类,继承person、school类。其中有name、age、studentNumber三个属性

上代码:

python

复制代码

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

调用:

scss

复制代码

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类中的代码不变

python

复制代码

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的多态

kotlin

复制代码

# 父类 动物
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方法

这个就对上了我们上边说的鸭子类型。

有好的建议,请在下方输入你的评论。

目录
相关文章
|
4天前
|
Python
Python从入门到精通:深入学习面向对象编程——2.1.2继承、封装和多态的概念
Python从入门到精通:深入学习面向对象编程——2.1.2继承、封装和多态的概念
|
4天前
|
Python
Python 一步一步教你用pyglet制作可播放音乐的扬声器类
Python 一步一步教你用pyglet制作可播放音乐的扬声器类
16 0
|
11天前
|
Python
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
53 0
|
12天前
|
索引 Python
python 格式化、set类型和class类基础知识练习(上)
python 格式化、set类型和class类基础知识练习
34 0
|
13天前
|
Python
python学习12-类对象和实例对象
python学习12-类对象和实例对象
|
1月前
|
Python
Python类(class)中self的理解
Python类(class)中self的理解
19 0
|
1月前
|
Python
Python类定义:从小白到专家的旅程
Python类定义:从小白到专家的旅程
8 0
|
Python
python class 初学
python class 初学 被测试的 code 我在lib目录创建一个hehe文件夹,和一个__init__空文件。把xclass(我的代码)放进去。xclass: print ('这里在执行') class Student(): def __init__(self,name,age): self.
1012 0
|
2天前
|
机器学习/深度学习 数据挖掘 API
pymc,一个灵活的的 Python 概率编程库!
pymc,一个灵活的的 Python 概率编程库!
5 1
|
2天前
|
人工智能 算法 调度
uvloop,一个强大的 Python 异步IO编程库!
uvloop,一个强大的 Python 异步IO编程库!
10 2