Python设置属性时出现AttributeError
Python AttributeError When Attribute is Set
我正在使用 pygame 创建一个蛇形克隆体,但我 运行 遇到了一个奇怪的问题。我有一个名为 snake_tile 的 class,它继承自 pygame 矩形 class,具有一个附加属性,即图块移动的方向:
import pygame
class snake_tile(pygame.Rect):
def __init__(self, left, top, width, height, direction):
super().__init__(left, top, width, height)
self.direction = direction
我在初始化snake_tile对象时传入一个元组作为方向:
snake_head = snake_tile(snake_tile_x, snake_tile_y, 10, 10, (0,0))
这将在我稍后移动图块时用作偏移量,因为 pygame.Rect.move() 函数接受 x 和 y 偏移量:
snake_head = snake_head.move(snake_head.direction[0], snake_head.direction[1])
但是,当我尝试像上面那样移动图块时,出现此错误:
AttributeError: 'snake_tile' object has no attribute 'direction'
但是当我尝试这样的事情时:
print(snake_head.direction)
snake_head = snake_head.move(snake_head.direction[0], snake_head.direction[1])
我得到输出:
(0, 0)
AttributeError: 'snake_tile' object has no attribute 'direction'
所以似乎方向属性设置正确,但是当我再次尝试访问是移动蛇头时,我得到一个属性错误。
有什么想法吗?
pygame.Rect.move
不会就地更改矩形对象:它会创建一个新对象和 returns 该新实例。
虽然它在继承方面表现良好:即它 returns 任何子类的新实例,而不是普通的 Rect
,它不会在其上设置 .direction
属性.
您的解决方法就像在子类的 .move
方法中设置方向属性一样简单:
class snake_tile(pygame.Rect):
def __init__(self, left, top, width, height, direction):
super().__init__(left, top, width, height)
self.direction = direction
def move(self, *args, **kw):
new_instance = super().move(*args, **kw) # we don't care which arguments are passed
new_instance.direction = self.direction
return new_instance
我正在使用 pygame 创建一个蛇形克隆体,但我 运行 遇到了一个奇怪的问题。我有一个名为 snake_tile 的 class,它继承自 pygame 矩形 class,具有一个附加属性,即图块移动的方向:
import pygame
class snake_tile(pygame.Rect):
def __init__(self, left, top, width, height, direction):
super().__init__(left, top, width, height)
self.direction = direction
我在初始化snake_tile对象时传入一个元组作为方向:
snake_head = snake_tile(snake_tile_x, snake_tile_y, 10, 10, (0,0))
这将在我稍后移动图块时用作偏移量,因为 pygame.Rect.move() 函数接受 x 和 y 偏移量:
snake_head = snake_head.move(snake_head.direction[0], snake_head.direction[1])
但是,当我尝试像上面那样移动图块时,出现此错误:
AttributeError: 'snake_tile' object has no attribute 'direction'
但是当我尝试这样的事情时:
print(snake_head.direction)
snake_head = snake_head.move(snake_head.direction[0], snake_head.direction[1])
我得到输出:
(0, 0)
AttributeError: 'snake_tile' object has no attribute 'direction'
所以似乎方向属性设置正确,但是当我再次尝试访问是移动蛇头时,我得到一个属性错误。
有什么想法吗?
pygame.Rect.move
不会就地更改矩形对象:它会创建一个新对象和 returns 该新实例。
虽然它在继承方面表现良好:即它 returns 任何子类的新实例,而不是普通的 Rect
,它不会在其上设置 .direction
属性.
您的解决方法就像在子类的 .move
方法中设置方向属性一样简单:
class snake_tile(pygame.Rect):
def __init__(self, left, top, width, height, direction):
super().__init__(left, top, width, height)
self.direction = direction
def move(self, *args, **kw):
new_instance = super().move(*args, **kw) # we don't care which arguments are passed
new_instance.direction = self.direction
return new_instance