Keep your place in this quest

Log in or sign up for free to subscribe, follow lesson progress, and access more learning content.

继承 是面向对象编程(OOP)的核心概念之一。
它允许一个类(称为子类派生类)继承另一个类(称为父类基类)的属性和方法。

这意味着你可以在基类中定义通用的行为和数据,然后创建更专门的类来重用和定制这些功能——而无需重复编写相同的代码。


继承的基本语法

在 Python 中,通过在子类名后面的括号中指定父类名来实现继承。

class ParentClass:
    # 父类的属性和方法

class ChildClass(ParentClass):
    # 子类的属性和方法
````

当子类继承自父类时,它获得:

* 父类的所有**属性**(绑定到对象的变量)
* 父类的所有**方法**(绑定到对象的函数)
* 父类可能拥有的任何**构造函数**(`__init__`)

---

# 示例:动物和声音

让我们用大家都能理解的东西来展示继承——动物。
我们将从一个通用的 `Animal` 类开始,定义所有动物共有的属性,然后创建特定的动物类型(`Dog` 和 `Cat`),它们共享这些特征但发出不同的声音。

基类如下:

```python
class Animal:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def sound(self):
        pass  # 由每种具体动物决定自己的声音
````

`Animal` 类有:

* 一个 `__init__` 方法,用于设置每个动物的 `name` 和 `age`。
* 一个 `sound()` 方法,目前不执行任何操作(`pass` 只是占位符)。
  我们将在每种具体动物中替换为它们发出的声音。

---

现在我们创建两个具体的动物类:

```python
class Dog(Animal):
    def sound(self):
        print("Woof woof!")

class Cat(Animal):
    def sound(self):
        print("Meow!")

这里发生的是:

  • DogCat继承Animal,因此它们自动拥有 nameage 属性,无需重新编写代码。
  • 每个类都重写sound() 方法,发出各自独特的声音。

创建和使用对象

dog = Dog("Rex", 2)
cat = Cat("Mimi", 3)

print(dog.name)  # Rex
dog.sound()      # Woof woof!

print(cat.name)  # Mimi
cat.sound()      # Meow!

当我们创建 Dog("Rex", 2) 时,步骤如下:

  1. Python 调用 Animal__init__ 方法(因为 Dog 没有自己的)。
  2. 我们传入的 nameage 值被存储在新对象中。
  3. 当调用 dog.sound(),Python 先在 Dog 中查找 sound() 方法。 找到并执行我们写的这个方法——打印 "Woof woof!"。

Cat 也是同样的逻辑,但调用的是它自己的 sound() 方法。


这个例子展示了继承的魔力

  • 我们只需在 Animal 类中写一次通用设置(__init__)。
  • 每个子类(DogCat)保留共享特征并添加自己的独特行为。
  • 结果是代码更少重复,逻辑更清晰,管理相关对象的方式也更简单。

3. 工作原理

  • 共享结构:创建 DogCat 对象时,会运行 Animal__init__ 方法,因为子类自动继承它。
  • 方法重写DogCat 各自有自己的 sound() 方法,替代了 Animal 中的占位实现。 调用 sound() 时,Python 使用子类中定义的方法,而非父类中的。
提示:如果子类没有重写某个方法,它会自动使用父类的实现。

为什么要使用继承?

继承让你:

  • 通过将共享逻辑放在单一基类中,避免重复代码。
  • 提高代码的模块化可读性
  • 从通用蓝图构建专门的类。

思考继承的例子:

  • Animal → 通用蓝图,包含 nameage 和一个 sound() 方法。
  • Dog → 一种特定动物,有自己独特的叫声。
  • Cat → 另一种特定动物,发出不同的叫声。

总结

继承是面向对象编程中用于创建类层次结构的强大工具,从通用概念出发,逐步走向更专门的类。

在 Python 中,实现方式是:

  1. 编写含有通用属性和方法的父类
  2. 创建在括号中列出父类名称的子类
  3. 根据需要在子类中添加或重写方法。

下一课中,我们将继续探讨 super() —— 一种让子类调用并扩展父类行为的方法。