SyntaxError:关键字参数重复:fget


class Rectangle:
def __init__(self,height,width) :
self.Height = height
self.Width = width
def _get_Height(self):
return self.Height

def _set_Height(self,value):
self.Height = value

def _get_Width(self):
return self.Width

def _set_Width(self,value2):
self.Width = value2

Dimensions = property(fget = _get_Height, fset = _set_Height, fget = _get_Width, fset = _set_Width)

我在属性括号内得到一个错误:

SyntaxError: keyword argument repeated: fget

在[fget=_get_Width]下方突出显示

问题是您在property函数中分别设置了两次fget=fset=参数,这是不允许发生的(在任何函数中,永远(。您可能想要做的是创建函数:返回元组(getter(,并接受元组(setter(,使用lambdas或普通函数。

此外,_get_width_get_height_set_width_set_height函数毫无意义,因为您可以将它们用作普通属性。相反,只需使用一个函数获取(_get_dims(和一个函数设置(_set_dims(。

通过这种方式,您还可以使用property装饰器来创建一个属性,而不仅仅是将其用作一个普通函数,这会使代码更加清晰。

完整的代码是:

class Rectangle:
def __init__(self, width, height) :
self.width = width
self.height = height
@property
def dimensions(self):
return (self.width, self.height)

@dimensions.setter
def dimensions(self, new_dims):
self.width = new_dims[0]
self.height = new_dims[1]

还要注意,在Python中,类以外的变量名应该总是小写,所以我相应地更改了变量名

此外,先宽后高更为正常,因此我已将构造函数中的顺序更改为width, height,而不是height, width,但如果需要,您可以将其更改回

最新更新