A minute ago I have understood what proxy inheritance is good for. sorry! On 4 Okt., 01:26, momo2k <tkew...@googlemail.com> wrote: > Hello, > > this may be a python-general question, but it came across my way while > working with django: > Imagine you have a model: > > class A(Model) > name = CharField() > type = SmallIntegerField(choices=SOME_TYPES) > > def do_something(self): > fancy_things > > I want do_something() do different things based on the actual type of > the instance. I know that this is a typical use case of subclassing, > but for some reasons (mostly avoiding generic m2m-relationships) I > decided to keep everything in one table. > My current implementation uses python-style switches to solve this > problem:: > > def do_something(self): > try: > {TYPE1: do_something1, > TYPE2: do_something2}[self.type]() > except KeyError: > raise ValueError('type not known') > > This is very verbose and not DRY. > I thought about solving this problem by changing the base class on the > fly using __bases__. But this seems to be very dirty. In addition, > this would have to be done every time self.type changes. I don't know > which hook I could use for this. > Second thought was using a read property self.impl which provides the > particualar implementations for a type: > > class _Type1Impl(object): > def do_something(self): > ... > > @property > def impl() > type_switch_here ... > > def do_something(self): > return self.impl.do_something() > > But this is also some verbose because of the "redirection" to > self.impl and I can imagine python provides much better ways to > achieve my goal. > > Any suggestions? > > Greets > momo
-- 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.