Greetings,
My chess engine has a Piece class with the following methods that use
the @property decorator to read and write the position value.
@property
def position(self):
return self._position
@position.setter
def position(self, position):
if self._first_move:
self._first_move = False
self._position = position
Blank is a subclass of the Piece class that represents an empty space on
the board and is a placeholder in the Board class _state dict. Since
Blank is a placeholder and not a playable game piece, I want to make
@position.setter non-operational (i.e, make no changes to the position
value).
@Piece.position.setter
def position(self, position):
pass
This code works and the corresponding unit test blows up because I
haven't changed it yet, but the PyCharm IDE complains that the
Blank.position signature doesn't match the Piece.position signature.
Never mind that I copy and paste the identical declaration from the
Piece class.
This code does work, blows up the unit test, and keeps PyCharm happy.
@property
def position(self):
return super().position
@position.setter
def position(self, position):
pass
Re-declaring @property and calling super seems redundant. Not sure if I
found a bug with the PyCharm hint feature or I'm not subclassing the
@property setter correctly. Which is it?
Thank you,
Chris R.
--
https://mail.python.org/mailman/listinfo/python-list