2016-04-30 43 views
0

我一直在试图制作一个简单的播放器类,它包含了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

你问你的例子中的括号? 'class'语句中的'(pygame.sprite.Sprite)'围绕基类。 'pygame.Surface((20,20))'中的双括号以2元组作为单个参数(内部圆括号)进行调用(外部圆括号)。 – Blckknght

+0

'(pygame.sprite.Sprite)' –

回答

1

class语句行尾的括号围绕您定义的类的基类。在通常情况下,只有一个基类(如果不需要其他基类,则可能是object)。在Python 3中,可以省略基类,默认情况下会使用object,但是您应该始终在Python 2中明确指定object(或某个子类)作为基础,否则您将得到一个“旧式”类是你可能不想要的东西。 (老式类已经彻底过时了,如果你不熟悉Python,就不值得了解,在Python 3中不再存在。)

指定一个基类可以让你的新类继承方法和其他行为来自基类。继承是面向对象编程的关键部分,所以你可能会遇到很多!

在您的具体示例中,plr类继承自pygame.sprite.Sprite。这意味着你可以在plr的实例上调用Sprite方法,他们通常会工作。如果你想定制对象的行为,你可以重写它们中的一些。

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

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

解释得很好。我使用的代码不正确,但在发布问题后我改变了它 –

相关问题