Объект родительского класса внутри дочернего класса Python - PullRequest
1 голос
/ 04 февраля 2020

У меня есть этот класс Button, полученный из pygame.Rect:

class Button(pg.Rect):

    def __init__(self, left, top, width, height, char):
        super().__init__(left, top, width, height)
        self.char = char

    def draw_rect(window):
        pg.draw.rect(window, pg.Color("red"), "rectobject")

pg.draw.rect принимает объект Rect в качестве третьего аргумента. Поэтому мне интересно, если метод super () создает объект родительского класса, и если да, то как ссылаться на него (как мы используем self для класса). Я знаю, что это тривиальная проблема, но мне интересно, как все это работает в Python. Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 04 февраля 2020

Вызов super () в дочернем классе неявно вызывает конструктор родителя, который заставляет дочерний объект иметь все свойства, которые имеет родительский, и вы можете просто получить к ним доступ, используя child.parentVar

Там разница синтаксиса между python 2.x и 3.x

Синтаксис для вызова родительского super и его семантики обсуждается здесь: { ссылка }

2 голосов
/ 04 февраля 2020

Вы унаследовали pg.rect и инициализировали свой объект как объект pg.rect. Таким образом, ваш объект Button имеет все атрибуты, которые находятся в объектах pg.rect. Вы можете использовать объект Button в случае, если вы можете использовать объект pg.rect. (Также необходимо добавить аргумент self в метод draw_rect)

import pygame as pg

display = pg.display.set_mode((100,100))

class Button(pg.Rect):

    def __init__(self, left, top, width, height, char):
        super().__init__(left, top, width, height)
        self.char = char

    def draw_rect(self, window):
        pg.draw.rect(window, pg.Color("red"), self)


b = Button(10,10,10,10,"a")

b.draw_rect(display)

pg.display.update()

И вызов super().__init__ ничего не создает, он инициализирует ваш параметр self. Таким образом, ваш self объект будет иметь такие атрибуты, как bottomleft, которые приходят от super().__init__.

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