Как создать экземпляр класса с двумя различными параметрами переменных в Python? - PullRequest
0 голосов
/ 28 мая 2018

Я не могу понять это, я все еще изучаю Python и Pygame, так что здесь код.Этот код имеет два класса, похоже, класс Player () имеет одинаковый код с Block (), я хочу минимизировать код, поэтому я не повторяю подобное заклинание, и способ сделать это - экземпляры класса, Player () является экземпляром Block () , как?

class Block(pygame.sprite.Sprite):
    def __init__(self, color, width, height):
        super().__init__()

        self.image = pygame.Surface([width, height])
        self.image.fill(color)

        self.rect = self.image.get_rect()

class Player(pygame.sprite.Sprite):
    def __init__(self, x, y):

        super().__init__()

        self.image = pygame.Surface([20, 15])
        self.image.fill(BLUE)

        self.rect = self.image.get_rect()

        self.rect.x = x
        self.rect.y = y

        self.change_x = 0
        self.change_y = 0

    def changespeed(self, x, y):
        self.change_x += x
        self.change_y += y

    def update(self):
        self.rect.x += self.change_x
        self.rect.y += self.change_y

после поиска ответа от вас, ребята, такой код

class Block(pygame.sprite.Sprite):
    def __init__(self, color, width, height):
        super().__init__()

        self.image = pygame.Surface([width, height])
        self.image.fill(color)

        self.rect = self.image.get_rect()

class Player(Block):
    def __init__(self, color, width, height, x, y):

        Block.__init__(self, color, width, height)

        self.rect.x = x
        self.rect.y = y

        self.change_x = 0
        self.change_y = 0

    def changespeed(self, x, y):
        self.change_x += x
        self.change_y += y

    def update(self):
        self.rect.x += self.change_x
        self.rect.y += self.change_y 

это код правда?когда я запускаю программу, она работает

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Так же, как игрок и блок наследуют от pygame.sprite.Sprite, вы можете иметь вместо него наследовать от блока:

class Player(Block):

Затем позвоните super().__init__()использовать конструктор Блока (который, в свою очередь, также вызовет конструктор pygame.sprite.Sprite):

class Player(Block):
    def __init__(self, x, y):
        super().__init__()

Затем добавьте весь код, специфичный для Player.

0 голосов
/ 28 мая 2018

добавить средний класс:

class Middle(pygame.sprite.Sprite):

    super().__init__()

    self.image = pygame.Surface([20, 15])
    self.image.fill(BLUE)

    self.rect = self.image.get_rect()

, затем класс Block и класс Player наследуют от среднего класса

...