我试图通过一个带有返回值的简单函数简单地从我的类中获取值,我确定它是一个微不足道的错误,但我对python来说是新手
我有一个简单的类设置:
class score():
#initialize the score info
def __init__(self):
self.score = 0
self.num_enemies = 5
self.num_lives = 3
# Score Info
def setScore(num):
self.score = num
# Enemy Info
def getEnemies():
return self.num_enemies
# Lives Info
def getLives():
return self.getLives
etc.....
比我创建一个类的实例:
scoreObj = score()
for enemies in range(0, scoreObj.getEnemies):
enemy_sprite.add(enemy())
我得到的错误是说预期有一个整数,但是它有一个instancemethod
获取此信息的正确方法是什么?
谢谢!
答案 0 :(得分:5)
scoreObj.getEnemies
是对该方法的引用。如果你想打电话,你需要括号:scoreObj.getEnemies()
。
你应该考虑为什么要使用这种方法,而不是直接阅读self.num_enemies
。在Python中不需要像这样的普通getter / setter方法。
答案 1 :(得分:3)
python中成员函数的第一个参数是对Object的引用。
传统上你称之为“自我”,但不管你称之为第一个参数,它都会引用“自我”对象:
每当我在python中得到关于参数类型的奇怪错误时,我会检查是否忘记了自我参数。多次遭到这个错误。
class score():
#initialize the score info
def __init__(self):
self.score = 0
self.num_enemies = 5
self.num_lives = 3
# Score Info
def setScore(self, num):
self.score = num
# Enemy Info
def getEnemies(self):
return self.num_enemies
# Lives Info
def getLives(foo): #foo is still the same object as self!!
return foo.num_lives
#Works but don't do this because it is confusing
答案 2 :(得分:3)
class score():
def __init__(self):
self.score = 0
self.num_enemies = 5
self.num_lives = 3
def setScore(self, num):
self.score = num
def getEnemies(self):
return self.num_enemies
def getLives(self):
return self.getLives
scoreObj = score()
for enemy_num in range(0, scoreObj.getEnemies()):
print enemy_num
# I don't know what enemy_sprite is, but
# I commented it out and just print the enemy_num result.
# enemy_sprite.add(enemy())
经验教训:
类函数必须始终取一个参数self
。
那是因为当你在类中调用一个函数时,你总是用类名作为调用对象来调用它,例如:
scoreObj = score()
scoreObj.getEnemies()
其中x
是类对象,它将作为根对象传递给getEnemies()
,这意味着第一个参数被发送到类。
其次,在类(或根本)调用函数时,总是以()
结束,因为这是在Python中调用某些东西的定义。
然后,问问自己,“为什么我没有取得'scoreObj.num_lives'而是这样呢?我是否节省了处理能力?”按你的选择做,但如果你这样做会更快直接从类对象获取值,除非您想同时计算内容。那你的逻辑很有道理!
答案 3 :(得分:1)
getEnemies
是一个函数,因此像任何其他函数scoreObj.getEnemies()
答案 4 :(得分:1)
你犯了一个简单的错误:
scoreObj.getEnemies()