gpt4 book ai didi

python - 添加两个未正确计算的 __init__ 变量(应该很简单解决,我是类的菜鸟)

转载 作者:行者123 更新时间:2023-11-28 19:42:49 24 4
gpt4 key购买 nike

我正在制作一个简单的基于文本的游戏。我的完整代码是 150 行,因此我将包括我认为相关的内容。如果您需要更多,请告诉我。

问题是这一行:

print("You deal " + str(hero.damage) + " damage to the monster")

只返回 5 而不是 5 + 所需的级别。

class Hero:

def __init__(self):
self.level = 0
self.damage = 5 + self.level #This is the problem line. Self.level seems to be treated as equal to 0 even when it is higher than 0.
self.experience = 0
def level_up(self): #triggered on monster death
xp_required = 15
if self.experience >= xp_required:
self.level += 1
hero = Hero()

我知道 hero.level_up() 是成功的,因为:

print(hero.level)

返回一个适当更新的关卡。

我猜是:

self.damage 只计算一次,然后存储该值,即使它的组件已更改。

或:

__init__ 中调用 __init__ 值存在某种问题。

或:

计算是在类 Hero 上完成的,而不是对象 Hero()

最佳答案

你是对的,self.damage 只被写入一次:在 __init__ 构造函数中,它本身只被调用一次(当对象被创建时)。那时,self.level 为零,因此 self.damage 将始终为 5。

你有两个选择:

  1. 要么更改代码以在更改级别时始终更新损坏。为了避免将伤害计算逻辑分散到多个地方,您可以创建一个辅助方法来更新伤害值:

    def update_damage(self):
    self.damage = 5 + self.level

    def level_up(self):
    if self.experience <= 15:
    self.level += 1
    self.update_damage()

    如果伤害值只依赖于等级,你也可以让它成为一个update_level(new_level)方法;但我在这里选择不使用该解决方案,因为其他一些东西也会影响以后的伤害(例如伤害药水或其他)并不少见。

  2. 或者您将damage 更改为一个计算属性,这样每当您访问它时都会计算损坏值。这具有每次都需要计算的开销,而不是将值存储在某个地方,但另一方面,您拥有关于损坏值的最终真相,并且您不需要记住在其他地方更新它:

    def __init__(self):
    self.level = 0
    self.experience = 0

    @property
    def damage(self):
    return 5 + self.level

关于python - 添加两个未正确计算的 __init__ 变量(应该很简单解决,我是类的菜鸟),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43035935/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com