Hummm, I see, thanks for that, I didn't know about type. And is there a way to generate functions too?(I was also doing it using exec).
And do you have any idea of how can I see the difference in performance when using one or the other? Thanks. Em segunda-feira, 16 de abril de 2012 13h45min58s UTC-3, Jefferson Heard escreveu: > > Check https://github.com/JeffHeard/ga_dynamic_models. It may be similar > to what you're looking for. Even if you don't want the code, you can see a > way of dynamically generating models. > > On Mon, Apr 16, 2012 at 12:40 PM, Philip Mountifield < > pmountifi...@formac.net> wrote: > >> 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.netwww.formac.netwww.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. >> > > -- 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/-/pxR15NDv5RUJ. 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.