侧边栏壁纸
博主头像
phphi

phphi's blog

  • 累计撰写 51 篇文章
  • 累计收到 0 条评论

Day18 - 面向对象进阶

2026-4-24 / 0 评论 / 1 阅读

面向对象进阶

继承

继承:子类复用父类的属性和方法,支持多级继承和多重继承。

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}正在引路"

多继承

class A: pass
class B: pass
class C(A, B): pass  # 多继承

注意:多重继承时,方法解析顺序(MRO)遵循 C3 线性化算法。

super() 调用父类方法

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}):汪!"

多态

不同对象对同一消息做出不同响应的能力。

def make_speak(animal):
    print(animal.speak())

dog = Dog('旺财', '金毛')
cat = Cat('咪咪')
make_speak(dog)  # 旺财 (金毛):汪!
make_speak(cat)  # 咪咪:喵~

抽象类与抽象方法

抽象类不能直接实例化,子类必须实现抽象方法。

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)强制子类实现抽象方法
  • 多态:同一接口,不同实现