在python中使用类中的变量
我想以前有人问过这个问题,但我没有找到适合我问题的答案。我基本上有一个针对不同角色的类,每个角色都有成本。当创建一个角色时,我想从玩家的得分中扣除他们的成本 下面是一个类的示例:在python中使用类中的变量,python,pygame,Python,Pygame,我想以前有人问过这个问题,但我没有找到适合我问题的答案。我基本上有一个针对不同角色的类,每个角色都有成本。当创建一个角色时,我想从玩家的得分中扣除他们的成本 下面是一个类的示例: class Assassin(pygame.sprite.Sprite): def __init__(self, x, y, row, column): pygame.sprite.Sprite.__init__(self) self.image = pygame.image.l
class Assassin(pygame.sprite.Sprite):
def __init__(self, x, y, row, column):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("assassin.png")
self.x = x
self.type = "assassin"
self.y = y
self.rect = self.image.get_rect(center=(self.x, self.y))
self.damage = 60
self.health = 40
self.speed = 2
self.move = False
self.cost = 4
self.row = row
self.column = column
下面是我想使用变量的代码:
if assassin.collidepoint(pygame.mouse.get_pos()) and mouseDown[0]:
for block in blockGroup:
if block.team1Taken == False and block.column ==1:
team1.add(Assassin(block.team1[0], block.team1[1], block.row, block.column))
block.team1Taken = True
score -= Assassin.__init__.cost #Example of what I think you would do
break
我希望我已经对此进行了充分的解释,以了解我想要什么。您需要保留一个对您创建的
刺客
实例的引用,然后访问其成本
属性:
if assassin.collidepoint(pygame.mouse.get_pos()) and mouseDown[0]:
for block in blockGroup:
if block.team1Taken == False and block.column == 1:
new_assassin = Assassin(block.team1[0], block.team1[1],
block.row, block.column)
team1.add(new_assassin)
block.team1Taken = True
score -= new_assassin.cost
break
您需要保留对您创建的
刺客
实例的引用,然后访问其成本
属性:
if assassin.collidepoint(pygame.mouse.get_pos()) and mouseDown[0]:
for block in blockGroup:
if block.team1Taken == False and block.column == 1:
new_assassin = Assassin(block.team1[0], block.team1[1],
block.row, block.column)
team1.add(new_assassin)
block.team1Taken = True
score -= new_assassin.cost
break
在python中,您不能调用
score-=刺客.init\uu.cost
。
init方法是类的构造函数,应该使用它来实现
您想要的值位于您创建的对象内部,因此您可以直接调用subscriber.cost
,假设subscriber就是对象
因此,您只需更改为:
if assassin.collidepoint(pygame.mouse.get_pos()) and mouseDown[0]:
for block in blockGroup:
if block.team1Taken == False and block.column ==1:
current_assassin = Assassin(block.team1[0], block.team1[1], block.row, block.column)
team1.add(current_assassin)
block.team1Taken = True
score -= current_assassin.cost
break
在python中,您不能调用
score-=刺客.init\uu.cost
。
init方法是类的构造函数,应该使用它来实现
您想要的值位于您创建的对象内部,因此您可以直接调用subscriber.cost
,假设subscriber就是对象
因此,您只需更改为:
if assassin.collidepoint(pygame.mouse.get_pos()) and mouseDown[0]:
for block in blockGroup:
if block.team1Taken == False and block.column ==1:
current_assassin = Assassin(block.team1[0], block.team1[1], block.row, block.column)
team1.add(current_assassin)
block.team1Taken = True
score -= current_assassin.cost
break
您应该将
刺客(block.team1[0],block.team1[1],block.row,block.column)
作为一个对象,然后使用它获取成本并将其添加到team1中。您应该将刺客(block.team1[0],block.team1[1],block.row,block.column)
一个对象,然后使用它获取成本并将其添加到团队1。您希望访问哪个刺客的成本
属性?是新创建的还是用于if
条件的?如果是新的,那就按照我的答案做。如果是If
条件下的缩进,只需使用sugger.cost
如果您总是缩进4个空格,并且不根据开始块的行的措辞改变缩进,那么您将是一个更快乐的Python用户。您希望访问哪个sugger
的cost
属性?是新创建的还是用于if
条件的?如果是新的,那就按照我的答案做。如果是If
条件下的缩进,只需使用hicker.cost
就可以了,如果你总是缩进4个空格,而不是根据开始块的行的措辞来改变缩进,你将是一个更快乐的Python用户。