MST

星途 面试题库

面试题:Python面向对象设计原则下的依赖倒置原则实践

假设你正在开发一个Python的游戏框架,游戏中有不同类型的角色和武器,武器有不同的攻击方式。请基于依赖倒置原则设计相关类结构,使得角色和武器之间的依赖关系更合理,且易于扩展和维护。描述设计思路并给出关键代码示例。
12.9万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

设计思路

  1. 定义抽象层
    • 创建抽象的武器类,定义武器攻击的抽象方法。这样角色依赖的是武器的抽象,而不是具体的武器实现类。
    • 不同类型的武器继承自这个抽象武器类,并实现其攻击方法。
  2. 角色类依赖抽象武器:角色类通过构造函数或方法参数等方式接收抽象武器类的实例,而不是直接依赖具体武器类,从而实现依赖倒置。

关键代码示例

from abc import ABC, abstractmethod


# 抽象武器类
class Weapon(ABC):
    @abstractmethod
    def attack(self):
        pass


# 具体武器类:剑
class Sword(Weapon):
    def attack(self):
        return "用剑砍击"


# 具体武器类:弓
class Bow(Weapon):
    def attack(self):
        return "用弓射击"


# 角色类,依赖抽象武器
class Character:
    def __init__(self, weapon: Weapon):
        self.weapon = weapon

    def perform_attack(self):
        return self.weapon.attack()


你可以这样使用这些类:

# 创建具体武器实例
sword = Sword()
bow = Bow()

# 创建角色并赋予武器
warrior = Character(sword)
archer = Character(bow)

print(warrior.perform_attack())
print(archer.perform_attack())