I am curious about the use of __slots__ here. Generally they're used to help with memory consumption? It seemed like an optimization that could be left out of a didactic program (and save some lines). However, when I removed the __slots__, I ended up with errors about Function objects not having func_defaults attributes. I didn't have time to fully understand what was going on. Will this of __slots__ be a topic in the text?