精通 Python 继承:概念、语法与实战示例
Python 继承
继承让你创建新类继承父类所有功能并添加或扩展特性。本教程通过清晰示例和最佳实践指导解释 Python 继承用法。
视频:Python 继承
Python 中的继承
继承是面向对象编程的核心原则,促进代码复用和逻辑层级。新类(派生或子类)以最小或无更改定义在现有类(基或父类)之上。子类自动获得父类属性和方法,可按需覆盖或扩展。
Python 继承语法
class BaseClass:
# 基类体
class DerivedClass(BaseClass):
# 派生类体
上例中 DerivedClass 继承 BaseClass 所有公共成员。通过添加新方法或覆盖现有方法,派生类可在复用基础实现的同时定制行为。
Python 继承示例
用实际例子说明继承。假设有通用 Polygon 类存储边数和边长:
class Polygon:
def __init__(self, no_of_sides):
self.n = no_of_sides
self.sides = [0 for _ in range(no_of_sides)]
def input_sides(self):
self.sides = [float(input(f"Enter side {i+1} : ")) for i in range(self.n)]
def display_sides(self):
for i, side in enumerate(self.sides, 1):
print(f"Side {i} is {side}")
Polygon 类封装任意多边形的通用属性和方法。Triangle 是恰好三边的特定多边形,可继承 Polygon 而无需重定义共享逻辑:
class Triangle(Polygon):
def __init__(self):
super().__init__(3) # 用 3 初始化基类
def find_area(self):
a, b, c = self.sides
s = (a + b + c) / 2
area = (s * (s - a) * (s - b) * (s - c)) ** 0.5
print(f"The area of the triangle is {area:.2f}")
运行以下代码演示继承:
>>> t = Triangle()
>>> t.input_sides()
Enter side 1 : 3
Enter side 2 : 5
Enter side 3 : 4
>>> t.display_sides()
Side 1 is 3.0
Side 2 is 5.0
Side 3 is 4.0
>>> t.find_area()
The area of the triangle is 6.00
注意 Triangle 能调用 input_sides() 和 display_sides() 尽管从未定义它们——继承自动提供这些方法。
若子类未找到属性或方法,Python 会搜索父类,必要时继续沿继承链向上查找。
Python 方法重写
Polygon 和 Triangle 都定义了 __init__ 方法。子类实现覆盖父类,但可(且应)通过显式调用扩展基础逻辑。用 super() 是现代首选方式:
class Triangle(Polygon):
def __init__(self):
super().__init__(3) # 调用 Polygon.__init__
重写时,子类方法可添加新行为或修改基础行为同时保留原功能。
Python 提供 isinstance() 和 issubclass() 内省继承关系:
t = Triangle()
print(isinstance(t, Triangle)) # True
print(isinstance(t, Polygon)) # True
print(isinstance(t, int)) # False
print(isinstance(t, object)) # True
print(issubclass(Polygon, Triangle)) # False
print(issubclass(Triangle, Polygon)) # True
print(issubclass(bool, int)) # True
这些工具对类型检查和确保对象符合预期接口至关重要。
更多 super() 信息见 Python super() 函数 文档。
Python
- 掌握 C# 继承:概念、类型与实战代码完全指南
- C# 继承完全指南:基类、派生类、初始化与多重继承替代方案
- 精通Python数据类型:实战指南
- 精通Python运算符:全面指南
- 精通Python Pass语句:实战指南
- 精通 Python 字典:创建、操作与进阶技巧
- 精通 Python 自定义异常:实战指南
- 精通 Python 面向对象编程:类、继承、封装与多态
- 精通 Python 运算符重载:实战指南
- 精通 Python @property 装饰器:简洁、向后兼容的 Getter 与 Setter
- 理解 Python type() 与 isinstance():实战示例详解
- Python 面向对象编程完全指南:从基础到进阶