我一直在尝试创建一个包含python中所有重要播放器函数的简单播放器类。当我注意到一个类使用括号时,我刚刚进入pygame模块。我花时间了解一个类在python中做了什么,但是,无法找到为什么在课后使用括号。这是我的主要代码。
class plr(pygame.sprite.Sprite):
def __init__(self):
plr.__init__(self)
self.image = pygame.Surface((20,20))
self.image.fill(black)
有任何解释吗?
答案 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__()
...