Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在类方法方面有困难_Python_Methods - Fatal编程技术网

Python 在类方法方面有困难

Python 在类方法方面有困难,python,methods,Python,Methods,所以我完全不明白为什么我的Player类方法不起作用 这是我的玩家课程的一部分: class Player( pygame.sprite.Sprite ): def __init__( self ): super( Player, self ).__init__() self.size = self.w,self.h = 75,75 self.image = pygame.Surface( ( self.size ) )

所以我完全不明白为什么我的Player类方法不起作用

这是我的玩家课程的一部分:

class Player( pygame.sprite.Sprite ):
    def __init__( self ):

        super( Player, self ).__init__()
        self.size = self.w,self.h = 75,75
        self.image = pygame.Surface( ( self.size ) )
        self.image.fill( white )

        self.move_y = 0
        self.move_x = 0

        self.level = None

        def set_properties(self):

            self.rect = self.image.get_rect()

            self.speed = 5

        def set_position( self, x, y ):
            self.rect.x = x
            self.rect.y = y
这里是我调用方法set_position的地方

player = Player()
player.set_position( 40, 40 )
看起来一切正常,但我收到以下错误消息:

Traceback (most recent call last):
  File "C:/Desktop/CubeRunner/main_v2.py", line 194, in <module>
    player.set_position( 40, 40 )
AttributeError: 'Player' object has no attribute 'set_position'
回溯(最近一次呼叫最后一次):
文件“C:/Desktop/CubeRunner/main_v2.py”,第194行,在
玩家。设置位置(40,40)
AttributeError:“玩家”对象没有属性“设置位置”

正如莫里斯所说,您的问题在于缩进。Python对代码中的缩进非常严格,因为缩进非常重要。缩进替换大括号、分号等

以下是带有适当缩进的代码:

class Player( pygame.sprite.Sprite ):
    def __init__( self ):

        super( Player, self ).__init__()
        self.size = self.w,self.h = 75,75
        self.image = pygame.Surface( ( self.size ) )
        self.image.fill( white )

        self.move_y = 0
        self.move_x = 0

        self.level = None

    def set_properties(self):

        self.rect = self.image.get_rect()

        self.speed = 5

    def set_position( self, x, y ):
        self.rect.x = x
        self.rect.y = y
如果您想了解有关Python缩进的更多信息(以及为什么会这样),请查看以下答案:


    • 正如莫里斯所说,您的问题在于缩进。Python对代码中的缩进非常严格,因为缩进非常重要。缩进替换大括号、分号等

      以下是带有适当缩进的代码:

      class Player( pygame.sprite.Sprite ):
          def __init__( self ):
      
              super( Player, self ).__init__()
              self.size = self.w,self.h = 75,75
              self.image = pygame.Surface( ( self.size ) )
              self.image.fill( white )
      
              self.move_y = 0
              self.move_x = 0
      
              self.level = None
      
          def set_properties(self):
      
              self.rect = self.image.get_rect()
      
              self.speed = 5
      
          def set_position( self, x, y ):
              self.rect.x = x
              self.rect.y = y
      
      如果您想了解有关Python缩进的更多信息(以及为什么会这样),请查看以下答案:


      根据您的缩进,您正在init方法中定义您的方法。取消输入它们,使它们与您的init方法处于同一级别,您应该没事。另外,确保在类声明下缩进init方法。现在它不属于该类。根据您的缩进,您正在init方法中定义您的方法。取消输入它们,使它们与您的init方法处于同一级别,您应该没事。另外,确保在类声明下缩进init方法。现在它不属于这个班。哈哈。像这样粗心的错误让我想笑。谢谢你发现了这一点。我有Java的背景,所以有时候我会忘记这些事情,哈哈,这不是问题——我也经常遇到这种情况:)希望你的项目结果很好!哈哈。像这样粗心的错误让我想笑。谢谢你发现了这一点。我有Java的背景,所以有时候我会忘记这些事情,哈哈,这不是问题——我也经常遇到这种情况:)希望你的项目结果很好!