2015-01-03 3 views
-2

Я пытаюсь создать класс с использованием Python 2.7.9, и он продолжает сталкиваться с ошибками.Ошибка скрипта класса Python?

Вот мой сценарий:

class Hero(): 
    def __init__(self, name): 

     self.health=50 
    def eat(self, food): 
     if(food=='apple'): 
      self.health+=10 
self.name=Jeff 
Jeff=Hero('Jeff') 

def introduce(self, name): 
    print Jeff.name 

def checkAtt(): 
    print Jeff.health 

introduce() 

Он продолжает говорить name 'Jeff' is not defined.

+1

Пожалуйста, отредактируйте ваш вопрос и укажите его соответствующим образом. – Maroun

+0

Является ли ошибка, что 'Jeff' не определена или что' Jeff.name' не определен? –

+0

отредактируйте ваш вопрос. –

ответ

0

У вашего кода есть множество проблем. Первое, что вызывает конкретную ошибку, то, что вы пытаетесь присвоить:

self.name = Jeff 

до того как вы определили как self или Jeff. self обычно используется только внутри методов экземпляра (например, ваш Hero.eat), где это имя первого параметра.


Во-вторых, ваш Hero.__init__ фактически не присвоить параметр атрибута namename; он должен выглядеть следующим образом:

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.

Смежные вопросы