允许将一个类附加到另一个类的设计模式

2024-04-24 15:34:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在设计一个RPG,并希望有能力附加类到彼此。我想做的是说一个项目类。武器类将从中继承。剑是武器类的一个实例。我想在剑上附加属性。这些属性将是其他类。例如,我可以将容器类附加到它,而剑(只有剑的那个实例)将成为一个容器。我也可以在那把剑上加上魔法之类的东西。你知道吗

作为奖励,它将很高兴能够结合实例以及。因此,我不必拥有火之附魔职业,只需将它作为附魔的一个实例,并将其附在剑的实例上。你知道吗

我在谷歌上搜索过,没有找到一个适合这个的设计模式。我记得学过一本,但记不起它叫什么了(几年前)

我不知道哪种设计模式允许这样。多个类的动态组合。你知道吗


Tags: 项目实例属性魔法设计模式动态能力容器
1条回答
网友
1楼 · 发布于 2024-04-24 15:34:22

我认为您似乎理解python中的继承思想(例如class Subclass(Superclass):),所以这里不讨论这个问题。你知道吗

你想“附加”的类可以被视为武器类中的任何其他变量。你知道吗

class Enchantment(object):
    def __init__(self, name, type):
        self.name = name
        self.type = type
        # can define more member variables here, and set with setter methods

    # more Enchantment methods here...

class Weapon(object):
    def __init__(self, name, type)
        self.name = name
        self.type = type
        self.enchantments = []
        # more Weapon member variables here

    def add_enchantment(self, enchantment):
        # any logic you need to check when adding an enchantment
        self.enchantments.append(enchantment)

然后在运行游戏代码的地方

sword = Weapon('My sword', 'sword')

fire_enchantment = Enchantment('Fireball', 'fire')
sword.add_enchantment(fire_enchantment)

然后您可以在Weapon类上添加方法来使用附魔/添加某些逻辑。你知道吗

附魔仍然是一个对象的实例,因此如果您在列表中访问它(可能通过名称标识它,或者在列表中循环),那么它的所有方法和变量都是可以访问的。你只需要通过Weapon类来构建一个接口,例如get_enchantment(self, name),或者让Weapon类中的其他方法与之交互(例如,当你attack时,你可以循环使用这些附魔,看看它们是否会增加额外的伤害)。你知道吗

关于如何设计类,显然有一些设计方面的考虑(例如,上面的内容是组合在一起的,不包括继承)。例如,您可能只允许每个武器使用一个附魔,在这种情况下,您不应该在武器对象中使用列表,而可以在构造函数中设置self.enchantment = None,在add_enchantment方法中设置self.enchantment = enchantment。你知道吗

我要说的是,您可以将Enchantment或其他“可附加”类的实例视为变量。只需确保创建类的实例,例如fire_enchantment = Enchantment('Fireball', 'fire')。你知道吗

在继承和面向对象方面有大量的阅读资料。希望这有帮助!你知道吗

OP的补充答案

我想混合模式就是我要找的。在深入研究之后,我发现了this post,它有一个动态混合的答案

相关问题 更多 >