Python 当类中的另一个相关实例变量发生更改时,如何更改实例变量?

Python 当类中的另一个相关实例变量发生更改时,如何更改实例变量?,python,python-3.x,python-2.7,class,oop,Python,Python 3.x,Python 2.7,Class,Oop,我最近尝试编写一个基于文本的游戏。当玩家升级时,我想改变玩家的熟练程度。我应该如何为此更改代码 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

我最近尝试编写一个基于文本的游戏。当玩家升级时,我想改变玩家的熟练程度。我应该如何为此更改代码

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()

您可以将
熟练程度
设置为属性,以便每次引用时都从当前级别计算熟练程度

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
方法中重新计算

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

def调平(自):
自身水平+=1
自我熟练程度=(智力(自我水平/3)+1)*2

您可以将
熟练程度
设置为属性,因此每次引用时都会从当前级别计算它。对于提出此问题的人来说,函数修饰符可能有点高级。事实上,我已经写python好几年了,你教了我一些新东西,所以谢谢!)如果你学到了一些新东西,你可能应该投票给这个答案@ericstevens26101