Как мне изменить атрибуты объектов класса после их создания в Python?

#python #game-development

#python #разработка игр

Вопрос:

Я пытаюсь создать атрибуты объекта, которые могут быть изменены позже в зависимости от вводимых пользователем данных

Суть в том, что я пытаюсь создать текстовую RPG со статистикой. Я сделал игрока объектом класса со статистикой, такой как «HP», «AC», «Сила» и тому подобное.

Основная часть игры — это возможность взаимодействия характеристик друг с другом. Например, «AC» игрока вычисляется путем добавления 10 и их модификатора «Dex»

Я хочу позволить игроку выбирать свой ‘Dex’, поэтому мне нужно иметь возможность соответствующим образом изменять атрибуты объекта

Однако Python, похоже, не распознает математику, которую я в него вкладываю.

 class Test:
  def __init__(self):
    self.x = 1
    self.y = 2
    self.z = self.x   self.y

test = Test()
test.y = 7
print(str(test.z))
  

печать дает мне ‘3’

Как я могу сделать так, чтобы он выдавал мне ‘8’?

Ответ №1:

Если вы хотите, чтобы значение атрибута вычислялось при доступе, это задача для @property декоратора, рассмотрим следующий пример:

 class Player:
    def __init__(self):
        self.x = 1
        self.y = 2
    @property
    def z(self):
        return self.x   self.y

player1 = Player()
player1.y = 7
print(player1.z)
  

Вывод:

 8
  

Если вы хотите узнать больше о декораторах в python, я предлагаю прочитать realpython Primer о декораторах python.

Комментарии:

1. Спасибо за быстрый ответ. Сейчас я нахожусь примерно в 2:45 утра, эта проблема не дает мне спать допоздна, поэтому я попробую это утром… ошибочный день, я думаю. Еще раз спасибо!

2. Это сработало! Спасибо миллион. Теперь я собираюсь прочитать руководство и выяснить, ПОЧЕМУ это сработало. лол