Метод super () инициализирует только некоторые параметры - PullRequest
1 голос
/ 11 октября 2019

, программируя мини-игру, я наткнулся на то, что не могу объяснить сам (довольно плохо знаком с python). Это мой код:

class Block:
    def __init__(self, x, y, hitpoints=1, color=(255, 0, 0), width=75, height=35):
        self.color = color
        self.x = x
        self.y = y
        self.height = height
        self.width = width
        self.hitpoints = hitpoints


class Ball(Block):
    def __init__(self, x, y, size, color=(255, 255, 255), velocity=1):
        super().__init__(self, x, y, color)
        self.velocity = velocity
        self.size = size

Я инициализирую объектный шар с помощью

ball = Ball(x=200, y=200, size=30)

Проблема возникает, когда я вызываю ball.x, так как он возвращает <Objects.Ball object at 0x00000249425A3508>.

Если я вызываю ball.y, он работает как положено и возвращает 200.

Я могу решить всю проблему, изменив класс Ball следующим образом:

class Ball(Block):
    def __init__(self,x, y, size, color=(255, 255, 255), velocity=1):
        super().__init__(self, y, color)
        self.velocity = velocity
        self.size = size
        self.x = x

Может кто-нибудь объяснить мне, почемуэто происходит?

Большое спасибо!

1 Ответ

4 голосов
/ 11 октября 2019

Вам необходимо вызвать super без self аргумент:

super().__init__(x, y, color=color)

Этот PEP объясняет, как это работает:

Новый синтаксис:

super()

эквивалентно:

super(__class__, <firstarg>)

, где __class__ - класс, в котором был определен метод, иявляется первым параметром метода (обычно self для методов экземпляра и cls для методов класса).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...