2346

12 分钟

#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())

>>> Establishing WebAssembly Runtime.

>>> Standby.

Powered by Shift.

#多态

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

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)

>>> Establishing WebAssembly Runtime.

>>> Standby.

Powered by Shift.

这段代码中的抚摸函数 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)

>>> Establishing WebAssembly Runtime.

>>> Standby.

Powered by Shift.

创建于 2025/5/7

更新于 2025/5/21