Атрибут не имеет себя (но это тоже не атрибут класса)

Я новичок в Python и пытаюсь понять классы.

Насколько мне известно, когда вы создаете класс, вы должны вставить self перед переменной, так что self заменяется экземплярами, когда они создаются (они становятся атрибутами экземпляра). Помимо атрибутов экземпляра, существуют также атрибуты класса, которые определяются в верхней части класса перед любыми методами.

Однако я наткнулся на этот код:

class Hero:
    def __init__(self, name):
        self.name = name
        self.health = 100

    def eat(self, food):
        if food == 'apple':
            health += 20
        elif food == "chocolate":
            health -= 10

Почему у еды нет «я»? Это не атрибут экземпляра, но мне тоже не кажется, что это атрибут класса .. Я использую python 2.X


person Acla    schedule 05.11.2015    source источник
comment
Поскольку food является параметром метода, а не атрибутом класса / экземпляра; он передается, например Hero('Hercules').eat('apple'). Этот метод вообще не относится к self, поэтому может быть @staticmethod.   -  person jonrsharpe    schedule 05.11.2015
comment
Возможный дубликат Когда требуется самостоятельно?. Дополнительное чтение: Какова цель self в Python?, Python init и сам, что они делают?.   -  person Celeo    schedule 05.11.2015
comment
Я был настолько сосредоточен на изучении атрибутов классов и экземпляров, что полностью забыл о простых параметрах функций. Спасибо!   -  person Acla    schedule 05.11.2015


Ответы (1)


food не относится к атрибуту объекта класса (который будет self.food), а скорее к параметру, заданному для eat.

person anOKsquirrel    schedule 05.11.2015