现在我正在为我的游戏在 pygame 中编写我的按钮类。该类接收一堆参数作为输入。表格的每个表达式都写起来很不方便self.arg = arg
。有什么方法可以将参数列表转换为 self.arg 吗?
比如有这样一种情况:
def __init__(self, surface, color, x, y, length, height, width, text, text_color, font_size):
self.surface = surface
self.color = color
self.x = x
self.y = y
pygame.draw.rect(self.surface, self.color, [self.x, self.y, 50, 50])
你想要这样:
def __init__(self, args): #args - список с элементами surface, color, x и y
super_function(args)
pygame.draw.rect(self.surface, self.color, [self.x, self.y, 50, 50])
您也可以这样做,例如,通过
*args, **kwargs
. 然后 inself.args
将是一个变量元组,并且 inself,kwargs
- 一个字典如果需要属性,你可以让它变得更复杂一点,并通过设置属性的魔法来完成
__setattr__()
,但懒得输入很多行。在列表中
attr
,我们设置了必要的属性,然后我们args
从元组中提取值并应用__setattr__
。应该考虑到args
可能有更多的参数 它捕获所有输入的参数,数量不限,然后您可以保存整个元组args
或稍后将其切断。如果参数较少,那么我们将
TypeError
在表单中得到一个不同于通常的异常(带有关于缺少参数的消息)IndexError
。您可以选择将其包装在TypeError
.