Skip to main content
 首页 » 编程设计

Python:为什么添加参数后方法的行为会有所不同

2025年05月04日19freeliver54

我在 Pygame Sprite 子类中有一个方法,定义如下:

def walk(self): 
    """move across screen""" 
    displacement = self.rect.move((self.move, 0)) 
    if self.rect.left < self.area.left or self.rect.right > self.area.right: 
        self.move = -self.move 
        displacement = self.rect.move((self.move, 0)) 
    self.rect = displacement 

我修改了一下,加了一个参数speed_x,现在程序坏了。

def walk(self, speed_x): 
    """move across screen""" 
    displacement = self.rect.move((speed_x, 0)) 
    if self.rect.left < self.area.left or self.rect.right > self.area.right: 
        speed_x = -speed_x 
        displacement = self.rect.move((speed_x, 0)) 
    self.rect = displacement 

在我这样调用方法之前:

def update(self): 
        self.walk() 

现在我这样做了:

def update(self): 
    self.walk(self.move) 

为什么这行不通?

请您参考如下方法:

您没有解释它是如何“损坏”的,但主要区别在于

speed_x = -speed_x 

您在第二个版本中拥有的,仅更改局部变量(参数是局部变量!)speed_x,因此更改后的值不会持续存在。

在第一个版本中,

self.move = -self.move  

确实改变了 self(特别是它的一个属性)并且改变“持续”在未来对对象的方法调用中,该对象在这里作为 self 访问。

这只是裸名(如 speed_x)和限定名(self.move 行)之间的众多主要区别之一,而且我怀疑,这里有什么问题(如果不说 第二个版本如何不符合您的预期,您可能很难猜测)。