У вашего кода есть множество проблем. Первое, что вызывает конкретную ошибку, то, что вы пытаетесь присвоить:
self.name = Jeff
до того как вы определили как self
или Jeff
. self
обычно используется только внутри методов экземпляра (например, ваш Hero.eat
), где это имя первого параметра.
Во-вторых, ваш Hero.__init__
фактически не присвоить параметр атрибута name
name
; он должен выглядеть следующим образом:
class Hero(object): # Note inheritance from 'object' for new-style class
def __init__(self, name):
self.name = name # Note assignment of instance attribute
self.health = 50
...
jeff = Hero("Jeff")
позвонит Hero.__init__
, создавая новый экземпляр Hero
, установив его атрибут name
в "Jeff"
(и health
атрибута 50
) и назначение этого экземпляра с именем jeff
.
В-третьих, у вас есть две автономные функции (introduce
и checkAtt
), что, вероятно, следует также быть методы экземпляра:
def Hero(object):
...
def introduce(self):
print self.name
...
jeff = Hero("Jeff")
jeff.introduce() # equivalent to 'Hero.introduce(jeff)'
или, если остальные, как автономные функции, принимать один параметр, Hero
экземпляра для работы (который должен не называться self
, опять же по соглашению) - нет смысла писать функцию, которая работает только в том случае, если она запущена в области, где доступно имя Jeff
!
class Hero(object):
...
def introduce(hero):
print hero.name
jeff = Hero("Jeff")
introduce(jeff)
Примечание отступы в этих двух различных случаях - это очень важно в Python. Также обратите внимание на различные способы вызова introduce
в зависимости от того, является ли это методом экземпляра или функцией.
Я предлагаю вам прочитать the tutorial on classes и the style guide.
Пожалуйста, отредактируйте ваш вопрос и укажите его соответствующим образом. – Maroun
Является ли ошибка, что 'Jeff' не определена или что' Jeff.name' не определен? –
отредактируйте ваш вопрос. –