diff options
Diffstat (limited to '_sources/recipes/inheritance.txt')
-rw-r--r-- | _sources/recipes/inheritance.txt | 62 |
1 files changed, 0 insertions, 62 deletions
diff --git a/_sources/recipes/inheritance.txt b/_sources/recipes/inheritance.txt deleted file mode 100644 index 983e044..0000000 --- a/_sources/recipes/inheritance.txt +++ /dev/null @@ -1,62 +0,0 @@ -Basic Inheritance -================= - -Introduction ------------- -Cheetah, like Python, is an object-oriented language if you so choose to -use it in that fashion. That is to say that you can use Cheetah in with -object-oriented principles *or* you can use Cheetah in a strictly functional -sense, like Python, Cheetah does not place restrictions on these barriers. - -While Cheetah is not strictly Python, it was designed as such to interoperate, -particularly with the notion of classes, with Python itself. In effect you can -define Python classes that inherit and extend from Cheetah-derived classes and -vice versa. For this, Cheetah defines a few **directives** (denoted with the `\#` -hash-mark) that are of some help, the most important one being the `\#extends` -directive, with others playing important roles like `\#import`, `\#attr` and `\#super` - -In this recipe/tutorial I intend to explain and define a few key inheritance -patterns with Cheetah, being: - -* A Cheetah Template inheriting from Python -* Python inheriting from a Cheetah Template -* Cheetah Templates and "*mixins*" - -This document also operates on the assumption that the reader is at least -somewhat familiar with the basic tenets of object-oriented programming in -Python. - - -Cheetah inheriting from Python ------------------------------- -Whether or not you are aware of it, Cheetah templates are always inheriting from -a Python class by default. Unless otherwise denoted, Cheetah templates are compiled -to Python classes that subclass from the `Cheetah.Template.Template` class. - -What if you would like to introduce your own Template base class? Easily acheived by -defining your own Template class in a Python module, for example:: - - import Cheetah.Template - - class CookbookTemplate(Cheetah.Template.Template): - _page = 'Cookbook' - author = 'R. Tyler Ballance' - def pageName(self): - return self._page or 'Unknown' - -**Figure 1. cookbook.py** - -For this example, I want all my subclasses of the `CookbookTemplate` to define a -page author which will be used in some shared rendering code, to accomplish this -my templates will need to subclass from `CookbookTemplate` explicitly instead of -implicitly subclassing from `Cheetah.Template.Template`:: - - #import cookbook - #extends cookbook.CookbookTemplate - #attr author = 'Tavis Rudd' - - ## The rest of my recipe template would be below - -**Figure 2. recipe1.tmpl** - - |