Python 基础入门 Day29

345次阅读
没有评论

共计 2110 个字符,预计需要花费 6 分钟才能阅读完成。

欢迎来到 Python 基础入门 Day29!今天,我们将学习 面向对象编程(OOP) 的高级特性,包括继承、多态、抽象类、接口和组合。通过这些内容,您将能够更高效、更灵活地组织和扩展代码结构。


目录

  1. 面向对象编程复习
  2. 继承与方法重写
  3. 多态:统一接口的多种实现
  4. 抽象类与接口
  5. 组合与模块化设计
  6. 小结与练习

一、面向对象编程复习

面向对象编程的四大核心概念:

  1. 封装(Encapsulation):将数据与操作数据的方法绑定到对象中,限制对内部状态的直接访问。
  2. 继承(Inheritance):子类可以继承父类的属性和方法,减少代码重复。
  3. 多态(Polymorphism):同一接口可以有不同的实现。
  4. 抽象(Abstraction):隐藏实现细节,仅暴露必要的接口。

回顾一个简单的类定义:

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

    def speak(self):
        return "I am an animal."

animal = Animal("Generic Animal")
print(animal.speak())

二、继承与方法重写

继承允许子类使用父类的属性和方法,并可以通过 方法重写(Method Overriding) 自定义子类行为。

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

    def speak(self):
        return f"{self.name} makes a sound."

# 子类继承
class Dog(Animal):
    def speak(self):  # 重写父类方法
        return f"{self.name} says Woof!"

class Cat(Animal):
    def speak(self):  # 重写父类方法
        return f"{self.name} says Meow!"

dog = Dog("Buddy")
cat = Cat("Kitty")

print(dog.speak())  # Buddy says Woof!
print(cat.speak())  # Kitty says Meow!

三、多态:统一接口的多种实现

多态的核心在于使用相同的接口调用不同类型对象的实现。

# 多态示例
animals = [Dog("Buddy"), Cat("Kitty"), Animal("Generic Animal")]

for animal in animals:
    print(animal.speak())

输出:

Buddy says Woof!  
Kitty says Meow!  
Generic Animal makes a sound.  

四、抽象类与接口

4.1 抽象类

抽象类是不能实例化的类,专门用来定义接口。Python 提供了 abc 模块实现抽象类。

from abc import ABC, abstractmethod

class Animal(ABC):
    @abstractmethod
    def speak(self):
        pass

class Dog(Animal):
    def speak(self):
        return "Woof!"

class Cat(Animal):
    def speak(self):
        return "Meow!"

# dog = Animal()  # 抽象类不能实例化
dog = Dog()
print(dog.speak())  # Woof!

4.2 接口模拟

Python 不直接支持接口,但可以通过抽象类模拟接口功能。

class Flyable(ABC):
    @abstractmethod
    def fly(self):
        pass

class Bird(Flyable):
    def fly(self):
        return "I am flying!"

bird = Bird()
print(bird.fly())

五、组合与模块化设计

组合(Composition)是另一种代码复用方式,通过将其他类作为属性嵌入到类中,而不是通过继承。

class Engine:
    def start(self):
        return "Engine started."

class Car:
    def __init__(self, engine):
        self.engine = engine

    def drive(self):
        return self.engine.start() + "Car is moving."

engine = Engine()
car = Car(engine)
print(car.drive())

组合的优点在于它可以更灵活地组织代码结构,不会受到继承层次限制。


六、小结与练习

今日总结

  1. 理解了继承和方法重写的原理与用法。
  2. 了解了多态的核心思想及其实现方式。
  3. 学会了使用 abc 模块定义抽象类和模拟接口。
  4. 掌握了组合的基本用法,并理解其与继承的区别。

今日练习

  1. 定义一个抽象类 Shape,要求所有子类实现 area 和 perimeter 方法,并创建 Circle 和 Rectangle 两个子类。
  2. 模拟一个接口 Flyable,要求实现 fly 方法,并定义 Bird 和 Airplane 两个实现类。
  3. 使用组合模式设计一个 Smartphone 类,其中包含 Camera 和 Battery 两个组件,并实现相应的方法。

下一节预告 :在 Day30 中,我们将进入面向对象编程的实战环节,使用 OOP 的知识构建一个简单的任务管理系统!敬请期待!😊

正文完
 0
评论(没有评论)