我是Python的新手,并且是第一次使用Python开发类。当我尝试使用构造函数时,虽然我不确定为什么会发生AttributeError,但是却得到了AttributeError。
class Pawn(object):
def __init__(self, x: int, y: int):
if (not x in range(1,9)):
raise ValueError('Invalid X-Position')
if (not y in range(1,9)):
raise ValueError('Invalid Y-Position')
self.x = x
self.y = y
@staticmethod
def parseFromString(sPawn):
try:
return Pawn(ord(sPawn[0]) - 96, int(sPawn[1]))
except ValueError:
raise ValueError('Parse Failed. Please check pawn string.')
def getLethals(self):
lethals = {}
try:
lethals.append(Pawn(self.x - 1, self.y))
lethals.append(Pawn(self.x + 1, self.y))
lethals.append(Pawn(self.x, self.y - 1))
lethals.append(Pawn(self.x, self.y + 1))
lethals.append(Pawn(self.x - 1, self.y - 1))
lethals.append(Pawn(self.x + 1, self.y + 1))
lethals.append(Pawn(self.x - 1, self.y + 1))
lethals.append(Pawn(self.x + 1, self.y - 1))
except ValueError:
pass
return lethals
def packToString(self):
return str(chr(self.x + 96)) + str(self.y)
@property
def x(self):
return self.x
@property
def y(self):
return self.y
当我尝试创建实例时:
def testFunc():
pawn = Pawn(2,4)
我得到一个:
AttributeError: can't set attribute
一直追溯到“典当”构造函数的“ self.x = x”。
编辑:我不了解属性是否撤销了类变量的写权限。我将添加二传手。
答案 0 :(得分:-1)
尝试一下:
x
和y
使用其他内部名称,即_x
和_y
。在班级内部,我们使用_x
和_y
,而在班级外部,我们使用x
和y
。setter
和x
添加了y
。代码:
class Pawn(object):
def __init__(self, x: int, y: int):
if (not x in range(1,9)):
raise ValueError('Invalid X-Position')
if (not y in range(1,9)):
raise ValueError('Invalid Y-Position')
self._x = x
self._y = y
@staticmethod
def parseFromString(sPawn):
try:
return Pawn(ord(sPawn[0]) - 96, int(sPawn[1]))
except ValueError:
raise ValueError('Parse Failed. Please check pawn string.')
def getLethals(self):
lethals = {}
try:
lethals.append(Pawn(self._x - 1, self._y))
lethals.append(Pawn(self._x + 1, self._y))
lethals.append(Pawn(self._x, self._y - 1))
lethals.append(Pawn(self._x, self._y + 1))
lethals.append(Pawn(self._x - 1, self._y - 1))
lethals.append(Pawn(self._x + 1, self._y + 1))
lethals.append(Pawn(self._x - 1, self._y + 1))
lethals.append(Pawn(self._x + 1, self._y - 1))
except ValueError:
pass
return lethals
def packToString(self):
return str(chr(self._x + 96)) + str(self._y)
@property
def x(self):
return self._x
@x.setter
def x(self, val):
self._x = val
@property
def y(self):
return self._y
@y.setter
def y(self, val):
self._y = val
pawn = Pawn(2,4)
print(pawn.x)
print(pawn.y)