Did you know that you can use the type function to dynamiclly generate a
class definition?
See http://docs.python.org/library/functions.html?highlight=type#type
From the example:
class X(object):
... a = 1
Is exactly the same as doing...
X = type('X', (object,), dict(a=1))
No exec required...
Regards
Phil
On 16/04/2012 17:19, Arruda wrote:
I'm doing something like this to generate some models dynamically:
SIMILAR_MODELS_TEMPLATE=
"""
@some_decorator
class %(PREFIX)sModel (Some_Abs_model):
\"""%(DESCRIPTION)s
\"""
pass
"""
then I have a factory:
def similar_models_factory(prefix,description):
format_dict = {
'PREFIX' : prefix,
'DESCRIPTION' : description,
}
cls_name = "%sModel" % prefix
cls_source = SIMILAR_MODELS_TEMPLATE % format_dict
exec(cls_source)
new_cls = locals().get(cls_name)
return new_cls
And finally I have in the models.py:
from my_factories import similar_models_factory
SIMILAR_MODELS_LIST =(
{'prefix': 'Foo', 'desc' : 'Foo model and etc..',},
{'prefix': 'Bars', 'desc' : 'Bars model and etc..',},
.....
)
for smodel in SIMILAR_MODELS_LIST:
cls = similar_models_factory(smodels['prefix'], smodels['desc'])
vars()[cls.__name__] = cls
And this gives my just what I want, but I read somewhere that if you do:
exec ""
It would be too costly, and I would like to know if this would have
some heavy load in my project(and if please, how can I calculate this,
to compare?)
Thanks!
--
You received this message because you are subscribed to the Google
Groups "Django users" group.
To view this discussion on the web visit
https://groups.google.com/d/msg/django-users/-/64JCLnsIFu0J.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/django-users?hl=en.
--
Philip Mountifield
Formac Electronics Ltd
tel +44 (0) 1225 837333
fax +44 (0) 1225 430995
pmountifi...@formac.net
www.formac.net
www.telgas.net
--
You received this message because you are subscribed to the Google Groups "Django
users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/django-users?hl=en.