- Python 教程
- Python 教程
- Python - 概述
- Python - 历史
- Python - 特性
- Python 与 C++
- Python - Hello World 程序
- Python - 应用领域
- Python 解释器及其模式
- Python - 环境设置
- Python - 虚拟环境
- Python - 基本语法
- Python - 变量
- Python - 数据类型
- Python - 类型转换
- Python - Unicode 系统
- Python - 文字
- Python - 运算符
- Python - 算术运算符
- Python - 比较运算符
- Python - 赋值运算符
- Python - 逻辑运算符
- Python - 按位运算符
- Python - 成员资格运算符
- Python - 身份运算符
- Python - 运算符优先级
- Python - 注释
- Python - 用户输入
- Python - 数字
- Python - 布尔值
- Python 控制语句
- Python - 控制流
- Python - 决策
- Python - if 语句
- Python - if-else 语句
- Python - 嵌套 if 语句
- Python - Match-Case 语句
- Python - 循环
- Python - For 循环
- Python for-else 循环
- Python - While 循环
- Python - break 语句
- Python - Continue 语句
- Python - pass 语句
- Python - 嵌套循环
- Python 函数和模块
- Python - 函数
- Python - 默认参数
- Python - 关键字参数
- Python - 仅关键字参数
- Python - 位置参数
- Python - 仅位置参数
- Python - 任意或可变长度参数
- Python - 变量范围
- Python - 函数注释
- Python - 模块
- Python - 内置函数
- Python 字符串
- Python - 字符串
- Python - 切片字符串
- Python - 修改字符串
- Python - 字符串连接
- Python - 字符串格式化
- Python - 转义字符
- Python - 字符串方法
- Python - 字符串练习
- Python 列表
- Python - 列表
- Python - 访问列表项
- Python - 更改列表项
- Python - 添加列表项
- Python - 删除列表项
- Python - 循环列表
- Python - 列表推导式
- Python - 排序列表
- Python - 复制列表
- Python - 联接列表
- Python - 列表方法
- Python - 列表练习
- Python 元组
- Python - 元组(Tuple )
- Python - 访问元组项
- Python - 更新元组
- Python - 解压缩元组项
- Python - 循环元组
- Python - 联接元组
- Python - 元组方法
- Python - 元组练习
- Python 集
- Python - 集(sets)
- Python - 访问 Set Items
- Python - 添加 Set Items
- Python - 删除 Set Items
- Python - 循环 Set Items
- Python - 联接 Sets
- Python - 复制 Set
- Python - Set 运算符
- Python - Set 方法
- Python - Set 的练习
- Python 字典
- Python - 字典
- Python - 访问字典项
- Python - 更改字典项
- Python - 添加字典项
- Python - 删除字典项
- Python - 字典视图对象
- Python - 循环字典
- Python - 复制字典
- Python - 嵌套字典
- Python - 字典方法
- Python - 字典练习
- Python 数组
- Python - 数组
- Python - 访问数组项
- Python - 添加数组项
- Python - 删除数组项
- Python - 循环数组
- Python - 复制数组
- Python - 反向数组
- Python - 对数组进行排序
- Python - 连接数组
- Python - 数组方法
- Python - 数组练习
- Python 文件处理
- Python - 文件处理
- Python - 写入文件
- Python - 读取文件
- Python - 重命名和删除文件
- Python - 目录
- Python - 文件方法
- Python OS 文件/目录方法
- Python - os.path 方法
- 面向对象编程
- Python - OOP 概念
- Python - 类和对象
- Python - 类属性
- Python - 类方法
- Python - 静态方法
- Python - 构造函数
- Python - 访问修饰符
- Python - 继承
- Python - 多态性
- Python - 方法覆盖
- Python - 方法重载
- Python - 动态绑定
- Python - 动态类型
- Python - 抽象
- Python - 封装
- Python - 接口
- Python - 软件包
- Python - 内部类
- Python - 匿名类和对象
- Python - 单例类
- Python - 包装类
- Python - 枚举
- Python - 反射
- Python 错误和异常
- Python - 语法错误
- Python - 异常处理
- Python - try-except 块
- Python - try-finally 块
- Python - 引发异常
- Python - 异常链接
- Python - 嵌套 try 块
- Python - 用户定义的异常
- Python - 日志记录
- Python - 断言
- Python - 内置异常
- Python 多线程
- Python - 多线程
- Python - 线程生命周期
- Python - 创建线程
- Python - 启动线程
- Python - 联接线程
- Python - 命名线程
- Python - 线程调度
- Python - 线程池
- Python - 主线程
- Python - 线程优先级
- Python - 守护程序线程
- Python - 同步线程
- Python 同步
- Python - 线程间通信
- Python - 线程死锁
- Python - 中断线程
- Python 网络
- Python - 网络编程
- Python - 套接字编程
- Python - URL 处理
- Python - 泛型
- Python 杂项
- Python - 日期和时间
- Python - math 模块
- Python - 迭代器
- Python - 生成器
- Python - 闭包(closures)
- Python - 装饰器( Decorators)
- Python - 递归
- Python - 正则表达式
- Python - PIP
- Python - 数据库访问
- Python - 弱引用
- Python - 序列化
- Python - 模板
- Python - 输出格式
- Python - 性能测量
- Python - 数据压缩
- Python - CGI 编程
- Python - XML 处理
- Python - GUI 编程
- Python - 命令行参数
- Python - 文档字符串
- Python - JSON
- Python - 发送电子邮件
- Python - 更多扩展
- Python - 工具/实用程序
- Python - 图形用户界面
- Python 高级概念
- Python - 抽象基类
- Python - 自定义异常
- Python - 高阶函数
- Python - 对象内部
- Python - 内存管理
- Python - 元类
- Python - 使用 Metaclasses 进行元编程
- Python - 模拟和存根
- Python - 猴子修补
- Python - 信号处理
- Python - 类型提示
- Python - 自动化教程
- Python - 人性化软件包
- Python - 上下文管理器
- Python - 协程
- Python - 描述符
- Python - 诊断和修复内存泄漏
- Python - 不可变数据结构
Python - 继承
什么是 Python 中的继承?
继承是 Python 等面向对象编程语言最重要的特性之一。它用于将一个类的属性和行为继承给另一个类。继承另一个类的类称为子类,被继承的类称为基类或父类。
如果你必须设计一个新类,其大多数属性已经在现有类中明确定义,那么为什么要重新定义它们呢?继承允许重用现有类的功能,并在需要时扩展以设计新类。
当新类与现有类具有 'IS A' 关系时,继承就会出现。例如,Car IS 车辆,Bus IS 车辆,Bike IS 车辆。此处,Vehicle 是父类,而 car、bus 和 bike 是子类。
创建 Parent Class
继承其属性和方法的类称为父类。它的定义与其他类一样,即使用 class 关键字。
语法
创建父类的语法如下所示 -
class ParentClassName:
{class body}
创建 Child 类
从基类继承的类的声明与其父类类似,但是,我们需要在括号内提供父类的名称。
语法
以下是子类的语法 -
class SubClassName (ParentClass1[, ParentClass2, ...]):
{sub class body}
继承的类型
在 Python 中,继承可以分为五个不同的类别 -
- 单一继承
- 多重继承
- 多级继承
- 分层继承
- 混合继承
Python - 单一继承
这是最简单的继承形式,其中子类仅从一个父类继承属性和方法。
例下面的示例显示了 Python 中的单一继承概念 -
# parent class
class Parent:
def parentMethod(self):
print ("Calling parent method")
# child class
class Child(Parent):
def childMethod(self):
print ("Calling child method")
# instance of child
c = Child()
# calling method of child class
c.childMethod()
# calling method of parent class
c.parentMethod()
在运行上述代码时,它将打印以下结果 -
Calling parent method
Python - 多重继承
Python 中的多重继承允许您基于多个父类构造一个类。因此,Child 类从所有父类继承属性和方法。子级可以覆盖从任何父级继承的方法。
语法
class parent1:
#statements
class parent2:
#statements
class child(parent1, parent2):
#statements
例
Python 的标准库有一个内置的 divmod() 函数,该函数返回一个包含两项的元组。第一个数字是两个参数的除法,第二个是两个操作数的 mod 值。
此示例尝试模拟 divmod() 函数。我们定义了两个类 division 和 modulus,然后有一个继承它们的 div_mod 类。
class division:
def __init__(self, a,b):
self.n=a
self.d=b
def divide(self):
return self.n/self.d
class modulus:
def __init__(self, a,b):
self.n=a
self.d=b
def mod_divide(self):
return self.n%self.d
class div_mod(division,modulus):
def __init__(self, a,b):
self.n=a
self.d=b
def div_and_mod(self):
divval=division.divide(self)
modval=modulus.mod_divide(self)
return (divval, modval)
子类有一个新方法 div_and_mod(),它在内部从其继承的类中调用 divide() 和 mod_divide() 方法以返回 division 和 mod 值。
x=div_mod(10,3)
print ("division:",x.divide())
print ("mod_division:",x.mod_divide())
print ("divmod:",x.div_and_mod())
输出
mod_division: 1
divmod: (3.3333333333333335, 1)
方法解析顺序 (MRO)
术语 method resolution order 与 Python 中的多重继承有关。在 Python 中,继承可能分布在多个级别上。假设 A 是 B 的父级,B 是 C 的父级。类 C 可以覆盖继承的方法,或者其对象可以按照其父类中的定义调用它。那么,Python 如何找到合适的方法来调用呢。
每个 Python 都有一个 mro() 方法,该方法返回 Python 用于解析要调用的方法的层次结构顺序。解析顺序是从继承顺序的底部到顶部。
在前面的示例中,div_mod 类继承了 division 和 modulus 类。因此,mro 方法返回顺序如下 -
[<class '__main__.div_mod'>, <class '__main__.division'>, <class '__main__.modulus'>, <class 'object'>]
Python - 多级继承
在多级继承中,一个类派生自另一个派生类。存在多个继承层。我们可以把它想象成一种祖父母-亲子-子的关系。
例在下面的示例中,我们将说明多级继承的工作原理。
# parent class
class Universe:
def universeMethod(self):
print ("I am in the Universe")
# child class
class Earth(Universe):
def earthMethod(self):
print ("I am on Earth")
# another child class
class India(Earth):
def indianMethod(self):
print ("I am in India")
# creating instance
person = India()
# method calls
person.universeMethod()
person.earthMethod()
person.indianMethod()
当我们执行上述代码时,它会产生以下结果——
I am on Earth
I am in India
Python - 分层继承
这种类型的继承包含从单个基类继承的多个派生类。这类似于组织内的层次结构。
例以下示例说明了分层继承。在这里,我们定义了 Manager 类的两个子类。
# parent class
class Manager:
def managerMethod(self):
print ("I am the Manager")
# child class
class Employee1(Manager):
def employee1Method(self):
print ("I am Employee one")
# second child class
class Employee2(Manager):
def employee2Method(self):
print ("I am Employee two")
# creating instances
emp1 = Employee1()
emp2 = Employee2()
# method calls
emp1.managerMethod()
emp1.employee1Method()
emp2.managerMethod()
emp2.employee2Method()
在执行上述程序时,您将获得以下输出 -
I am Employee one
I am the Manager
I am Employee two
Python - 混合继承
两种或多种继承类型的组合称为混合继承。例如,它可以是单继承和多继承的混合。
例在此示例中,我们将单个继承和多个继承组合在一起,以形成类的混合继承。
# parent class
class CEO:
def ceoMethod(self):
print ("I am the CEO")
class Manager(CEO):
def managerMethod(self):
print ("I am the Manager")
class Employee1(Manager):
def employee1Method(self):
print ("I am Employee one")
class Employee2(Manager, CEO):
def employee2Method(self):
print ("I am Employee two")
# creating instances
emp = Employee2()
# method calls
emp.managerMethod()
emp.ceoMethod()
emp.employee2Method()
在运行上述程序时,它将给出以下结果 -
I am the CEO
I am Employee two
super() 函数
在 Python 中,super() 函数允许你从子类中访问父类的方法和属性。
例在下面的示例中,我们创建一个父类并使用 super() 函数从子类访问其构造函数。
# parent class
class ParentDemo:
def __init__(self, msg):
self.message = msg
def showMessage(self):
print(self.message)
# child class
class ChildDemo(ParentDemo):
def __init__(self, msg):
# use of super function
super().__init__(msg)
# creating instance
obj = ChildDemo("Welcome to qikepu!!")
obj.showMessage()
在执行时,上述程序将给出以下结果 -