Как изменить переменную экземпляра при изменении другой связанной переменной экземпляра в классе? - PullRequest
0 голосов
/ 09 мая 2020

Недавно я пытался написать текстовую игру. Я хочу изменить уровень мастерства игрока при повышении его уровня. Как мне изменить свой код для этого?

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

Ответы [ 2 ]

1 голос
/ 09 мая 2020

Вы можете пересчитать атрибут proficiency непосредственно в функции levelUp(). После обновления атрибута level это новое значение level будет использоваться для вычисления нового proficiency.

    def levelUp(self):
        self.level+=1
        self.proficiency = (int(self.level/3)+1)*2
0 голосов
/ 09 мая 2020

Вы можете сделать 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 метод.

...