国际访客建议访问 Primers 编程伙伴 国际版站点 > Python 教程 > 继承和多态 以获得更好的体验。

# Python 的继承和多态

继承 是基于已有的类创建新类的语法,被继承的类称为 父类,创建的新类称为 子类。子类自动拥有父类相同的属性和方法。

class 类名(父类名):
    pass

父类也称基类、超类,子类也称派生类。

例如:

运行示例

class Pet:
    """
    宠物类
    """

    def __init__(self, name:str):
        """
        构造函数

        参数:
            name(str):名字
        """
        self.__name = name

    def name(self) -> str:
        """
        name 方法,获取名字

        返回值:
            str:宠物的名字
        """

        return self.__name

# 猫类继承宠物类
class Cat(Pet):
    
    # 添加额外的方法
    def catch_mouses():
        pass

# 狗类继承宠物类
class Dog(Pet):
    
    # 添加额外的方法
    def guard_gates():
        pass

# 创建对象,使用继承的构造函数
tom = Cat("Tom")
happy = Cat("Happy")
spike = Dog("Spike")

# 调用继承的方法
print(tom.name())
print(happy.name())
print(spike.name())

# 多态

子类可以重新定义父类的方法:

运行示例

class Pet:
    """
    宠物类
    """

    def speak(self):
        """
        speak 方法,说话
        """
        print("某种动物在说话")

class Cat(Pet):
    """
    猫类,继承宠物类
    """

    def speak(self):
        """
        speak 方法,说话
        """
        print("喵喵喵")

class Dog(Pet):
    """
    狗类,继承宠物类
    """

    def speak(self):
        """
        speak 方法,说话
        """
        print("汪汪汪")

class Rabbit(Pet):
    """
    兔子类,继承宠物类
    """

# 创建对象
cat = Cat()
dog = Dog()
rabbit = Rabbit()

# 调用 speak 方法
cat.speak()         # 调用 Cat 类重载后的 speak
dog.speak()         # 调用 Dog 类重载后的 speak
rabbit.speak()      # Rabbit 没有定义 speak,调用父类的 speak

# 抚摸宠物
def fondle(pet:Pet):
    pet.speak()     # 会根据实际类型调用

# 抚摸宠物
fondle(cat)
fondle(dog)
fondle(rabbit)

这段代码中的抚摸函数 fondle 的形式参数 pet 的类型是基类 Pet,通过 pet 调用 speak 时,会根据实际类型调用。

这种以统一的接口实现不同行为的特性称为 多态(Polymorphism)

# super

如果子类重写了构造函数,那么它需要在构造函数中调用父类的构造函数来初始化继承的属性。Python 中可以通过 super 函数获取父类。

运行示例

class Pet:
    """
    宠物类
    """

    def __init__(self, name:str):
        """
        构造函数

        参数:
            name(str): 名字
        """
        self.name = name

class Cat(Pet):
    """
    猫类,继承宠物类
    """

    def __init__(self, name:str, breed:str):
        """
        构造函数

        参数:
            name(str): 名字
            breed(str): 品种
        """

        super().__init__(name)      # 调用父类的构造函数

        self.breed = breed          # 创建新的属性

# 创建对象
cat = Cat("Tom", "Chartreux")
print(cat.name)
print(cat.breed)
本文 更新于: 2025-06-19 01:15:31 创建于: 2025-06-19 01:15:31