子类 Python 中的父类的对象



我有这个从pygame派生的按钮类。矩形:

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 中的工作方式很感兴趣。提前感谢!

你继承了 pg.rect,并且像 pg.rect 对象一样初始化了你的对象。因此,您的按钮对象具有pg.rect对象中的所有属性。在可以使用 pg.rect 对象的情况下,您可以使用 Button 对象。(您还需要将 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对象将具有来自super().__init__bottomleft等属性。

在子类中调用 super(( 会隐式调用父类的构造函数,该构造函数使子对象具有父对象具有的所有属性,您只需使用 child.parentVar 访问它们即可

python 2.x 和 3.x 之间的语法存在差异

此处讨论了调用父级 super 的语法及其语义: https://stackoverflow.com/a/33191175/12507046

最新更新