# 面向对象进阶 ## 继承 继承:子类复用父类的属性和方法,支持多级继承和多重继承。 ```python class Animal: def __init__(self, name): self.name = name def speak(self): raise NotImplementedError("子类必须实现 speak 方法") class Dog(Animal): def speak(self): return f"{self.name}:汪!" class Cat(Animal): def speak(self): return f"{self.name}:喵~" class GuideDog(Dog): def guide(self): return f"{self.name}正在引路" ``` ### 多继承 ```python class A: pass class B: pass class C(A, B): pass # 多继承 ``` > **注意**:多重继承时,方法解析顺序(MRO)遵循 C3 线性化算法。 ## super() 调用父类方法 ```python class Animal: def __init__(self, name): self.name = name class Dog(Animal): def __init__(self, name, breed): super().__init__(name) # 调用父类 __init__ self.breed = breed # 子类新增属性 def speak(self): return f"{self.name} ({self.breed}):汪!" ``` ## 多态 不同对象对同一消息做出不同响应的能力。 ```python def make_speak(animal): print(animal.speak()) dog = Dog('旺财', '金毛') cat = Cat('咪咪') make_speak(dog) # 旺财 (金毛):汪! make_speak(cat) # 咪咪:喵~ ``` ## 抽象类与抽象方法 抽象类不能直接实例化,子类必须实现抽象方法。 ```python from abc import ABC, abstractmethod class Shape(ABC): @abstractmethod def area(self): pass @abstractmethod def perimeter(self): pass class Circle(Shape): def __init__(self, r): self.r = r def area(self): return 3.14159 * self.r ** 2 def perimeter(self): return 2 * 3.14159 * self.r ``` ## 总结 - 继承复用父类代码,支持多级和多重继承 - `super()` 调用父类构造器和方法 - 抽象类(ABC)强制子类实现抽象方法 - 多态:同一接口,不同实现