python对象是否需要与其类具有相同数量的参数?

python对象是否需要与其类具有相同数量的参数?,python,class,pygame,Python,Class,Pygame,所以我在pygame教程中遇到了这个类定义: class GameObject: def _init_(self,image,height,speed): self.speed = speed self.image = image self.pos = image.get_squarerect().move(0,height) def move(self):

所以我在pygame教程中遇到了这个类定义:

class GameObject:
        def _init_(self,image,height,speed):
                self.speed = speed
                self.image = image
                self.pos = image.get_squarerect().move(0,height)
        def move(self):
                self.pos = self.pos.move(0, self.speed)
                if self.pos.right > 600:
                        self.pos.left = 0
然后,编码器执行此操作以用对象填充数组(?):

objects = []
for x in range(10):
    o=GameObject(player, x*40, x)
    objects.append(o)   

我的问题是,为什么在实例化对象时只传递3个参数,而让类接受其中4个参数?

在每次方法调用时都隐式提供self对象

对于
\uuuu init\uuuuu
,它是一个全新的对象,Python将该全新对象作为self提供引用

对于除
\uuuuu init\uuuuuu
之外的方法调用,您实际上提供了self引用的对象,而不是作为显式参数,而是在调用方法的对象中提供的对象(object.method(foo)对应于对象类定义中的“def method(self,foo)”


因此,在您的示例中,
\uuuu init\uuu
接受4个参数(包括self),但仅使用3个参数(不包括self)调用。“move”方法接受1个参数(self),但将使用0个参数调用。

self
是隐式传递的,它是对对象当前实例化的引用。这在这里的官方教程中进行了讨论:

Python要求任何实例方法的第一个参数都是您选择用来引用当前实例的任何名称

在国际海事组织,使用“自我”这个名称是一项应该严格遵守的公约,但它只是一项公约

如果你从来没有遇到过使用“self”或“this”的语言,这里有一个关于发生了什么的简要说明:


定义一个类意味着您正在一个框(实际上是一个“名称空间”)中编写代码以供以后使用。“以后使用”基本上是指实例化该类,从而创建一个对象。虽然您可以通过执行“myobj=myClass”来实例化对象,从而使对象的名称为“myobj”,但在您实际为类编写代码时,无法知道其名称。这就是为什么你使用“自我”

类方法必须指定用于引用实例的名称(Python程序员几乎总是称为“self”)。在调用期间(调用方法时),第一个方法参数始终作为第一个参数隐式传递。