为什么Python把一个类中的自我看作是我必须给出的一个论点

为什么Python把一个类中的自我看作是我必须给出的一个论点,python,arguments,self,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,directi

这是我的问题,当我运行包含此内容的程序时,我得到以下结果:

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)
回溯(最近一次呼叫最后一次):
文件“F:\ISN\essai 2.py”,第63行,在
Combatant.mov(tkey)
TypeError:mov()正好接受2个参数(给定1个)

Python似乎把“自我”看作是我需要为之工作的论点。我尝试过使用alpha函数,或者在自变量所在的位置放置一个空格,但当然我会得到一个错误,说“无效语法”,alpha函数不会改变任何东西。。。也许我用错了,因为我是初学者。。。如果有人能帮助我,那将是非常有帮助的!谢谢,这是事先准备好的

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

通常,人们用大写字母命名他们的类,用小写字母命名他们的实例,以便于发现此类问题

例如:

 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)

之所以需要
self
,是为了让方法知道它们应用于哪个实例。这使得该类可以有多个实例。当您调用
some\u instance.some\u method(…)
时,python将在调用该方法时自动添加
self
参数

当您创建实例并调用该实例上的方法时,
self
将被绑定。如果您直接在类上调用方法,则没有要绑定的实例。您需要首先创建
Combatant
的实例,而不是直接访问该类上的方法。是否可以帮助更正该错误?我是否应该先运行Combatant()?是的,但您需要传入参数;应该将
img
posit
设置为什么值?好的,所以一个大问题是,这个程序最初是用来与Vector2一起使用的,我尝试在没有。。。所以我现在要尝试使用get_rect()方法重新定义posit。。。但今晚不行!!!谢谢你的帮助,玛蒂恩·皮特斯和布莱恩·奥克利
class Combattant(...):
    ...
combattant = Combattant(...)
combattant.move(tkey)