How do I subclass the @property setter method?

Christopher Reimer christopher_reimer at icloud.com
Fri May 20 14:50:37 EDT 2016


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.




More information about the Python-list mailing list