在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用户。