欢迎来到 Python 基础入门 Day29!今天,我们将学习 面向对象编程(OOP) 的高级特性,包括继承、多态、抽象类、接口和组合。通过这些内容,您将能够更高效、更灵活地组织和扩展代码结构。
目录
- 面向对象编程复习
- 继承与方法重写
- 多态:统一接口的多种实现
- 抽象类与接口
- 组合与模块化设计
- 小结与练习
一、面向对象编程复习
面向对象编程的四大核心概念:
- 封装(Encapsulation):将数据与操作数据的方法绑定到对象中,限制对内部状态的直接访问。
- 继承(Inheritance):子类可以继承父类的属性和方法,减少代码重复。
- 多态(Polymorphism):同一接口可以有不同的实现。
- 抽象(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())
组合的优点在于它可以更灵活地组织代码结构,不会受到继承层次限制。
六、小结与练习
今日总结
- 理解了继承和方法重写的原理与用法。
- 了解了多态的核心思想及其实现方式。
- 学会了使用
abc
模块定义抽象类和模拟接口。 - 掌握了组合的基本用法,并理解其与继承的区别。
今日练习
- 定义一个抽象类
Shape
,要求所有子类实现area
和perimeter
方法,并创建Circle
和Rectangle
两个子类。 - 模拟一个接口
Flyable
,要求实现fly
方法,并定义Bird
和Airplane
两个实现类。 - 使用组合模式设计一个
Smartphone
类,其中包含Camera
和Battery
两个组件,并实现相应的方法。
下一节预告:在 Day30 中,我们将进入面向对象编程的实战环节,使用 OOP 的知识构建一个简单的任务管理系统!敬请期待! 😊