Python 基础入门 Day29

欢迎来到 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,要求所有子类实现 areaperimeter 方法,并创建 CircleRectangle 两个子类。
  2. 模拟一个接口 Flyable,要求实现 fly 方法,并定义 BirdAirplane 两个实现类。
  3. 使用组合模式设计一个 Smartphone 类,其中包含 CameraBattery 两个组件,并实现相应的方法。

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

Comments

No comments yet. Why don’t you start the discussion?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注