For those familiar with Python you may think you're comfortable with classes and types. But does "__init__" really create new objects? How can you construct classes dynamically without even using the "class" keyword? What is the type of "type"? What alternative patterns are there for invoking functions? And how does any of this work?
In this introduction to Metaprogramming we will learn how it can be leveraged to achieve some Python "magic". You will pick up some techniques and practices you can use yourself and will get an insight into how Django uses Metaprogramming in its ORM as a real-world example of its use. Hopefully you'll even learn a few new things about Python you didn't know were possible.