2. Meta Classes
A Design pattern
Dynamically create classes
Enables Flexibility,Good API
Used by Frameworks
Perform “Magic”
3. Where Meta Classes?
Frameworks, frameworks, frameworks.
Django uses them extensively.
Scrappy, a web scrapping framework.
Flexible Django apps. Eg: Django-registration
4.
5. Executes the code when encountered
Creates namespace and stores all variables in it
6. `type` is an inbuilt MetaClass
Dynamic class = Static classes
8. Meta Class Magic
Define a class extending object
Examined type is string, Magic!
Enables Declarative Syntax
9. MetaClasses, not always
Simple function decorators
Unintuitive to end developers, unless
explained
Python 2.6+ has Class Decorators
But being powerful, where they are needed,
indespesible
11. Django Models Creation
Declarative Syntax, No `__metaclass__`
New model created in place
Options into `Options` object
Register in registry called `AppCache`
Add attributes to new model
12. Inside Django Models
Return the same registered Model from
AppCache
Original options and Meta options stored in
`_meta`
Add more useful attributes/classes like
`DoesnotExist`, `module_name` and
`class_name`
14. Rendering in html
Validation for right data
Displaying errors
Customization options
Provided model, storing to the database
15. Dynamic Django forms - 1
Forms API is flexible, but often needs Meta Classes
`base_fields` and `fields` list store all fields
Change field attributes while initialization