为什么Python认为类中的self是我必须给出的参数

时间:2014-04-09 18:14:44

标签: python arguments self

class combattant(pygame.sprite.Sprite):
    def __init__(self,img,posit):
        pygame.sprite.Sprite.__init__(self)
        self.image=marche[0]
        self.image_pos=posit
        self.face=0
    def mov(self,direction):
        if direction[K_LEFT]:
            self.face=(self.face+1)%2
            self.image_pos.x -= 1
            self.image=marche[0+self.face]
            print ('gauche')
        if direction[K_RIGHT]:
            print ("droit")
            self.face=(self.face+1)%2
            self.image_pos.x += 1
            self.image=marche[2+self.face]

combattant.mov (tkey)

这是我的问题,当我运行包含它的程序时,我得到了这个:

 Traceback (most recent call last):
File "F:\ISN\essai 2.py", line 63, in <module>
combattant.mov (tkey)
TypeError: mov() takes exactly 2 arguments (1 given)

Python似乎在考虑自我&#39;作为我需要给出的论点才能使它发挥作用。我尝试过使用alpha函数或在自我参数中放置一个空格,但当然我收到一条错误,上面写着&#39; Invalid Syntax&#39;并且alpha功能不会改变任何东西......也许我用错误的方式使用它,因为我是初学者...如果有人可以帮助我,那将是非常有帮助的!提前谢谢!

1 个答案:

答案 0 :(得分:1)

在您的特定情况下,当您致电combatant.move()时,您正在调用该类的实例上的类而不是。使用该方法的正确方法是首先创建一个实例。

通常,人们用大写字母命名他们的类,用小写字母命名他们的实例,以使这样的问题容易被发现。

例如:

class Combattant(...):
    ...
combattant = Combattant(...)
combattant.move(tkey)

需要self的原因是,方法知道它们应用于哪个实例。这使得可以有多个类的实例。当你调用some_instance.some_method(...)时,python会在调用方法时自动添加self参数。