most of this book has focused on straightforward application-coding techniques--the modulesfunctionsand classes that most programmers spend their time writing to achieve real-world goals the majority of python' users may use classes and make instancesand might even do bit of operator overloadingbut they probably won' get too deep into the details of how their classes actually work howeverin this book we've also seen variety of tools that allow us to control python' behavior in generic waysand that often have more to do with python internals or tool building than with application-programming domains as reviewand to help us place metaclasses in the tools spectrumintrospection attributes and tools special attributes like __class__ and __dict__ allow us to inspect internal implementation aspects of python objectsin order to process them generically--to list all attributes of an objectdisplay class' nameand so on as we've also seentools such as dir and getattr can serve similar roles when "virtualattributes such as slots must be supported operator overloading methods specially named methods such as __str__ and __add__ coded in classes intercept and provide behavior for built-in operations applied to class instancessuch as printingexpression operatorsand so on they are run automatically in response to built-in operations and allow classes to conform to expected interfaces attribute interception methods special category of operator overloading methods provides way to intercept attribute accesses on instances generically__getattr____setattr____delattr__and __getattribute__ allow wrapper ( proxyclasses to insert automatically run code that may validate attribute requests and delegate them to embedded objects they allow any number of attributes of an object to be computed when accessed--either selected attributesor all of them class properties the property built-in allows us to associate code with specific class attribute that is automatically run when the attribute is fetchedassignedor deleted though not as generic as the prior paragraph' toolsproperties allow for automatic code invocation on access to specific attributes class attribute descriptors reallyproperty is succinct way to define an attribute descriptor that runs functions on access automatically descriptors allow us to code in separate class and to quote python error message just came across"typeerrormetaclass conflictthe metaclass of derived class must be (non-strictsubclass of the metaclasses of all its bases(!this reflects an erroneous use of module as superclassbut metaclasses may not be as optional as developers imply -- theme we'll revisit in the next conclusion to this book to metaclass or not to metaclass