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方法

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

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

目录
相关文章
|
7天前
|
设计模式 Python
简单分享下python多态
多态是面向对象编程中至关重要的特性,通过继承和方法重写,可以实现代码复用和灵活扩展。Python的鸭子类型进一步增强了多态的灵活性,使得代码更具适应性。通过理解和应用多态,可以写出更为简洁、优雅和高效的代码。
34 9
|
15天前
|
算法 Python
Python多继承时子类如何调用指定父类
通过本文的介绍,希望您能够深入理解Python多继承时子类如何调用指定父类的方法,并在实际项目中灵活运用这些技巧,编写出高效且易维护的代码。
24 11
|
14天前
|
算法 Python
Python多继承时子类如何调用指定父类
通过本文的介绍,希望您能够深入理解Python多继承时子类如何调用指定父类的方法,并在实际项目中灵活运用这些技巧,编写出高效且易维护的代码。
31 1
|
2月前
|
索引 Python
python-类属性操作
【10月更文挑战第11天】 python类属性操作列举
29 1
|
2月前
|
Java C++ Python
Python基础---类
【10月更文挑战第10天】Python类的定义
28 2
WK
|
2月前
|
Python
Python类命名
在Python编程中,类命名至关重要,影响代码的可读性和维护性。建议使用大写驼峰命名法(如Employee),确保名称简洁且具描述性,避免使用内置类型名及单字母或数字开头,遵循PEP 8风格指南,保持项目内命名风格一致。
WK
21 0
|
2月前
|
程序员 开发者 Python
深度解析Python中的元编程:从装饰器到自定义类创建工具
【10月更文挑战第5天】在现代软件开发中,元编程是一种高级技术,它允许程序员编写能够生成或修改其他程序的代码。这使得开发者可以更灵活地控制和扩展他们的应用逻辑。Python作为一种动态类型语言,提供了丰富的元编程特性,如装饰器、元类以及动态函数和类的创建等。本文将深入探讨这些特性,并通过具体的代码示例来展示如何有效地利用它们。
58 0
|
2月前
|
Python
Python中的类(一)
Python中的类(一)
21 0
跟我从0学Python——类的继承和多态
类的继承和多态 —— 面向对象编程的扩展与灵活性
|
7月前
|
搜索推荐 Python
Python学习 -- 类的继承
Python学习 -- 类的继承
48 0