【问题标题】:How to change instance variable when another related instance variable is changed in a class?当类中的另一个相关实例变量发生更改时,如何更改实例变量?
【发布时间】:2020-08-24 16:02:38
【问题描述】:

我最近尝试编写基于文本的游戏。我想在玩家升级时更改玩家熟练度。我应该如何更改我的代码?

class Player:
    def __init__(self,name,_class,_race):
        self.name = name
        self.level = 1
        self.proficiency = (int(self.level/3)+1)*2
        self.inventory = 0
        self.skills = returnSkills()
        self.stats = returnStats()
        self._class = _class
        self._race = _race
        self.exp = 0

    def levelUp(self):
        self.level+=1


newPlayer = Player("Player","Barbarian","Human")

print(newPlayer.level)

for i in range(10):
    print(newPlayer.level)
    print(newPlayer.proficiency)
    newPlayer.levelUp()

【问题讨论】:

  • 您可以将proficiency 设为属性,因此每次引用它时都会从当前级别计算。

标签: python python-3.x python-2.7 class oop


【解决方案1】:

您可以直接在levelUp() 函数中重新计算proficiency 属性。更新level 属性后,level 的新值将用于计算新的proficiency

    def levelUp(self):
        self.level+=1
        self.proficiency = (int(self.level/3)+1)*2

【讨论】:

    【解决方案2】:

    您可以将proficiency 设为一个属性,因此每次引用它时都会从当前级别计算它。

    class Player:
        def __init__(self,name,_class,_race):
            self.name = name
            self.level = 1
            self.inventory = 0
            self.skills = returnSkills()
            self.stats = returnStats()
            self._class = _class
            self._race = _race
            self.exp = 0
    
        @property
        def proficiency(self):
            return (int(self.level/3)+1)*2
        ...
    

    或者您可以将其保留为普通属性,并在您的 levelUp 方法中重新计算它。

    【讨论】:

    • 函数装饰器对于提出这个问题的人来说可能有点高级。事实上,我已经写 python 几年了,你教会了我一些新东西,所以谢谢! :)
    • 如果你学到了一些新东西,你应该对这个答案投赞成票@ericstevens26101
    猜你喜欢
    • 2023-03-08
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    相关资源
    最近更新 更多