MST

星途 面试题库

面试题:Python面向对象设计原则之开闭原则应用

请阐述Python中开闭原则的含义,并举例说明如何在Python代码中遵循开闭原则进行开发。例如,给定一个简单的图形绘制类,要求添加新的图形类型时,尽量不修改原有代码,如何设计实现?
35.3万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

开闭原则含义

开闭原则(Open-Closed Principle,OCP)是面向对象编程中的一个重要原则,其含义是:软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。即当软件需要进行功能扩展时,应该通过添加新代码的方式来实现,而不是修改已有的代码。这样可以提高软件的稳定性、可维护性和可扩展性。

Python代码遵循开闭原则示例

1. 定义图形基类

from abc import ABC, abstractmethod


class Shape(ABC):
    @abstractmethod
    def draw(self):
        pass

2. 定义具体图形类

class Circle(Shape):
    def draw(self):
        print("绘制圆形")


class Rectangle(Shape):
    def draw(self):
        print("绘制矩形")

3. 定义图形绘制管理类

class ShapeDrawer:
    def __init__(self):
        self.shapes = []

    def add_shape(self, shape):
        self.shapes.append(shape)

    def draw_all(self):
        for shape in self.shapes:
            shape.draw()


4. 使用示例

drawer = ShapeDrawer()
circle = Circle()
rectangle = Rectangle()
drawer.add_shape(circle)
drawer.add_shape(rectangle)
drawer.draw_all()

5. 添加新图形类型

当需要添加新的图形类型,如三角形时,只需要定义新的三角形类并继承Shape基类,而不需要修改原有代码。

class Triangle(Shape):
    def draw(self):
        print("绘制三角形")


triangle = Triangle()
drawer.add_shape(triangle)
drawer.draw_all()

在上述代码中,Shape类是所有图形类的基类,具体图形类(如CircleRectangleTriangle)继承自Shape类并实现draw方法。ShapeDrawer类用于管理和绘制所有图形。当需要添加新的图形类型时,只需要创建新的类继承Shape并实现draw方法,然后将其添加到ShapeDrawer中即可,无需修改Shape类、ShapeDrawer类以及其他已有的具体图形类的代码,遵循了开闭原则。