Python descriptors understanding and using the descriptor protocol - Zimmerman, Jacob (Apress, 2018)