我正在尝试使用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
。
答案 0 :(得分:0)
您的代码存在很多问题。第一个导致特定错误的是您尝试分配:
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
属性设置为{{ 1}})并将该实例分配给名称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
请注意这两种不同情况下的缩进 - 这在Python中非常重要。另外,请注意调用class Hero(object):
...
def introduce(hero):
print hero.name
jeff = Hero("Jeff")
introduce(jeff)
的不同方法,具体取决于它是实例方法还是函数。