在调用一个类后,括号会做什么?

时间:2016-04-30 15:13:30

标签: class python-3.x pygame

我一直在尝试创建一个包含python中所有重要播放器函数的简单播放器类。当我注意到一个类使用括号时,我刚刚进入pygame模块。我花时间了解一个类在python中做了什么,但是,无法找到为什么在课后使用括号。这是我的主要代码。

class plr(pygame.sprite.Sprite):
    def __init__(self):
        plr.__init__(self)
        self.image = pygame.Surface((20,20))
        self.image.fill(black) 

有任何解释吗?

1 个答案:

答案 0 :(得分:1)

class语句中行尾的括号环绕着您定义的类的基类。在通常情况下,只有一个基类(如果不需要其他基类,则可以是object)。在Python 3中,您可以省略基类,并且默认情况下将使用object,但是您应该始终在Python 2中明确地将object(或某些子类)命名为基础,或者您是'我会得到一个老式的#34;这是你可能不想要的课程。 (如果你是Python的新手,那么旧式的课程已经过时了,不值得去学习。他们在Python 3中不再存在。)

指定基类可让新类继承基类中的方法和其他行为。继承是面向对象编程的关键部分,因此您可能会遇到相当多的事情!

在您的具体示例中,plr类继承自pygame.sprite.Sprite。这意味着您可以在Sprite的实例上调用plr方法,而这些方法通常只会起作用。如果要自定义对象的行为,可以覆盖其中一些。

我确实在您的代码中看到了错误。您编写的__init__方法会无限递归,因为它会调用plr.__init__,这本身就是!您可能希望它调用pygame.sprite.Sprite.__init__,这是最重要的。您可以使用我上面提到的长名称或使用super(更好)来拨打该电话。尝试:

class plr(pygame.sprite.Sprite):
    def __init__(self):
        super(plr, self).__init__()
        ...