Python类脚本运行错误?

时间:2015-01-03 11:59:53

标签: python python-2.7

我正在尝试使用Python 2.7.9创建一个类,并且它一直遇到错误。

这是我的剧本:

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 个答案:

答案 0 :(得分:0)

您的代码存在很多问题。第一个导致特定错误的是您尝试分配:

self.name = Jeff
在定义selfJeff之前

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属性设置为{{ 1}})并将该实例分配给名称50


第三,你有两个独立的函数(jeffintroduce),它们也可能是实例方法:

checkAtt

或者,如果作为独立函数保留,则采用单个参数,def Hero(object): ... def introduce(self): print self.name ... jeff = Hero("Jeff") jeff.introduce() # equivalent to 'Hero.introduce(jeff)' 实例进行操作(按照惯例再次 不能调用Hero) - 编写一个仅在名称self可用的范围内运行时才有效的函数没有多少意义!

Jeff

请注意这两种不同情况下的缩进 - 这在Python中非常重要。另外,请注意调用class Hero(object): ... def introduce(hero): print hero.name jeff = Hero("Jeff") introduce(jeff) 的不同方法,具体取决于它是实例方法还是函数。


我建议你阅读the tutorial on classesthe style guide