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

Reply via email to