Generic Python

Carl Banks imbosol at vt.edu
Mon Jun 24 19:44:20 CEST 2002


Uwe Mayer wrote:
> Is it somehow possible to have the "base2" class return a class instead
> of an instance?
> Is there another way to solve this problem?


In Python 2.1 and above, you can take advantage of nested scopes to
generate different classes from a template.  The idea is to put the
template class definition inside a function, and have the class refer
to the function's arguments.

def template_factory(baseclass,text):
    class template(baseclass):
        def output(self):
            print text
    return template

Remember to use from __future__ import nested_scopes if you're on
Python 2.1.  If you're using 2.0 or lower, you can still fake the
nested scopes thing with a default argument:

def template_factory(baseclass,text):
    class template(baseclass):
        def output(self,text=text):
            print text
    return template


Here's an example session:

Python 2.1.3 (#1, Apr 20 2002, 10:14:34)
[GCC 2.95.4 20011002 (Debian prerelease)] on linux2
Type "copyright", "credits" or "license" for more information.
>>> from __future__ import nested_scopes
>>> def template_factory(text):
...     class template:
...         def output(self):
...             print text
...     return template
...
>>> a = template_factory("hello, world")
>>> b = a()
>>> b.output()
hello, world
>>> c = template_factory("hello, my name is inigo montoya")
>>> d = c()
>>> d.output()
hello, my name is inigo montoya


-- 
CARL BANKS                                http://www.aerojockey.com
"Nullum mihi placet tamquam provocatio magna.  Hoc ex eis non est."



More information about the Python-list mailing list