python在已经具有自身功能的另一个类中获取自变量

时间:2017-01-06 18:35:38

标签: python class pygame self

我想在一个类中使用自变量,并在另一个已经拥有自己的自变量的类中使用它们如何执行此操作。有些代码可以提供帮助。

class A():
    self.health = 5
class B(): # This class already has a self function
    for sprite in all_sprites:
        if pygame.sprite.collide_circle(self, sprite):
            self.collide = True
            self.health -= 0.1

2 个答案:

答案 0 :(得分:0)

你是误会。 self仅是内部参考。在课堂上,您可以参考self。否则,您直接引用sprite对象,

class A():
    self.health = 5
class B(): # This class already has a self function
    for sprite in all_sprites:
        if pygame.sprite.collide_circle(self, sprite):
            sprite.collide = True
            sprite.health -= 0.1

答案 1 :(得分:0)

以下代码可能有助于解释如何在课程中使用self。请注意第45行,self传递给精灵类的collide方法。在类的内部,如果需要,您可以将self(表示您正在使用的当前实例)传递给任何其他实例方法或函数。

import math
import random


def main():
    b = B(5, 5, 2)
    print('Health =', b.health)
    b.collide_sprites()
    print('Health =', b.health)


class Sprite:

    def __init__(self, x, y, radius):
        self.x = x
        self.y = y
        self.radius = radius

    def collide(self, other):
        middle_distance = math.hypot(self.x - other.x, self.y - other.y)
        edge_margin = self.radius + other.radius
        return middle_distance < edge_margin


class A(Sprite):

    def __init__(self, x, y, radius):
        super().__init__(x, y, radius)
        self.health = 5


class B(A):

    def __init__(self, x, y, radius):
        super().__init__(x, y, radius)
        self.all_sprites = [A(
            random.randrange(10),
            random.randrange(10),
            random.randint(1, 4)
        ) for _ in range(50)]
        self.collide = False

    def collide_sprites(self):
        for sprite in self.all_sprites:
            if sprite.collide(self):
                self.collide = True
                self.health -= 0.1


if __name__ == '__main__':
    main()