首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python类如何有一个变量属性,在调用时给出一个可变的结果?

python类如何有一个变量属性,在调用时给出一个可变的结果?
EN

Stack Overflow用户
提问于 2018-12-06 23:24:30
回答 1查看 36关注 0票数 2

这是一个上下文:一个RPG,其中我定义了一个"Dice“类,这样就可以很容易地获得随机数。我想让一个魔法法术造成伤害,因为掷骰子的结果。

代码语言:javascript
运行
复制
import random
class Dice:
    def __init__(self, name, value):
        self.name = name
        self.value = value

    def get_dice(self):
        return random.randrange(1, int(self.value + 1))

d4 = Dice("d4", 4)
d6 = Dice("d6", 6)
d8 = Dice("d8", 8)

dice = [d4, d6, d8]

class Spell:
    def __init__(self, name, value):
        self.name = name
        self.value = value

    def get_spell_damage(self):
        return self.value

fire = Spell("fire", d8.get_dice())
ice  = Spell("ice", d6.get_dice() + d6.get_dice())
wind = Spell("wind", d4.get_dice() + d4.get_dice() + d4.get_dice())

spellbook = [fire, ice, wind]

问题是,当定义咒语时,骰子被滚动,而不是每次被调用时。如果我说:

代码语言:javascript
运行
复制
print(str(ice.get_spell_damage()), str(ice.get_spell_damage()), str(ice.get_spell_damage()))

当我得到像“7-7”这样的结果时,它告诉我,在spellbookice.value中,每个"d6.get_dice()“都给出了唯一的结果,但是现在它有了一个定义的值。

应该如何更改代码,以便每次调用该拼写时都对其进行评估?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-06 23:38:29

您可以让SpellSpell方法获取一个Dice的列表,并使get_spell_damage调用列表中每个骰子的get_dice方法,并将滚动数之和:

代码语言:javascript
运行
复制
class Spell:
    def __init__(self, name, dices):
        self.name = name
        self.dices = dices

    def get_spell_damage(self):
        return sum(dice.get_dice() for dice in self.dices)

fire = Spell("fire", [d8])
ice  = Spell("ice", [d6, d6])
wind = Spell("wind", [d4, d4, d4])

如果需要具有静态损坏值的Spell,则可以创建Dice的子类,其get_dice方法总是返回一个固定值:

代码语言:javascript
运行
复制
class StaticDice(Dice):
    def get_dice(self):
        return self.value

这样您就可以创建一个具有静态伤害值的法术,如下所示:

代码语言:javascript
运行
复制
earth = Spell("earth", [StaticDice('s10', 10)])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53661175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档