Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 6, 2016 13:30:23

Franek
От: Беларусь
Зарегистрирован: 2016-05-09
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

Область видимости переменной в классе

При создании объекта в методе-конструкторе def __init__ создаётся переменная hunger. Подскажите, почему не видно переменную hunger в статическом методе def eat ? Она же объявлена глобальной?

 class Critter(object):
    def __init__(self, name, hunger = 0, boredom = 0):
        hunger = random.randint(0, 3)
        boredom = random.randint(0, 3)
        self.name = name
        self.hunger = hunger
        self.boredom = boredom
    def __pass_time(self):
       ...
    def __str__(self):
      ...
    @property
    def mood(self):
      ...
    def talk(self):
      ...
    @staticmethod
    def eat( food = 4):
        food = int(input("Сколько кусочков корма вы дадите им? От 1 до 5. "))
        print("Мням-мням...  Спасибо.")
        global hunger
        hunger -= food
        if hunger < 0:
            hunger = 0
        self.__pass_time()
    @staticmethod
    def play(fun = 4):
       ...
def main():
    crit1 = Critter("Бобик")
    crit2 = Critter("Шарик")
    crit3 = Critter("Полкан")
    sp = [crit1, crit2, crit3]
    choice = None
    while choice != "0":
        print \
        ("""
        Critter Caretaker
Выдаёт ошибку:
NameError: name ‘hunger’ is not defined

Отредактировано Franek (Авг. 6, 2016 13:41:30)

Офлайн

#2 Авг. 6, 2016 14:17:58

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Область видимости переменной в классе

Franek
Она же объявлена глобальной?
у вас две переменные hunger одна переменная класса Critter.hunger другая переменная экземпляра self.hunger и вы ни в одну не попали.

Кстати а зачем вы дублируете переменные?



Отредактировано doza_and (Авг. 6, 2016 14:19:21)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version