Как изменить значение атрибута в классе без вызова метода в Python? - PullRequest
0 голосов
/ 28 мая 2020

Я делал этот проект Pokemon на Codecademy, и он попросил меня сделать что-то, о чем я совершенно не мог думать, так как у меня мало практики по OOPS и python.

Как Могу я установить is_knocked_out = True, не вызывая никаких методов в моем экземпляре? Я думаю, что мой код должен автоматически знать, когда здоровье покемона становится равным нулю, и автоматически менять его атрибут is_knocked_out на True. Я искал в Интернете, но не нашел окончательного решения, возможно, это как-то связано с декораторами.

Кто-нибудь, пожалуйста, объясните мне, как это сделать, потому что я думаю, что здесь я наткнулся на стену.

Пока я написал следующий код:

class Pokemon:

    def __init__(self,name,level,ptype,is_knocked_out= False):
        self.name = name
        self.level = level
        self.type = ptype
        self.max_health = level
        self.curr_health = max_health
        self.is_knocked_out = is_knocked_out

    def lose_health(self,loss_amount):
        self.curr_health -= loss_amount
        print(f"{self.name} has now health of {self.curr_health}")

    def regain_health(self,gain_amount):
        self.curr_health += gain_amount
        print(f"{self.name} has now health of {self.curr_health}")

    #@property
    def knock_out(self):
        if self.curr_health <=0:
            self.is_knocked_out = True
            print(f"{self.name} has been knocked out")

1 Ответ

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

Хороший подход - сделать is_knocked_out a property, чтобы его значение всегда можно было вычислить из curr_health:

class Pokemon:
    ...

    @property
    def is_knocked_out(self):
        return self.curr_health <= 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...