Go Back   Rhinocerus > Newsgroup > Newsgroup comp.lang.python

Reply
 
Thread Tools Display Modes
  #1 (permalink)  
Old 08-15-2012, 09:36 PM
MRAB
Guest
 
Posts: n/a
Default Re: Dynamically determine base classes on instantiation

On 15/08/2012 22:17, Thomas Bach wrote:
> Hi list,
>
> I'm confronted with a strang problem I cannot find a clean solution
> for. To me it seems like I need meta-classes. Anyway, I stucked a bit
> deeper in that topic and couldn't find a proper solution neither. But,
> judge for yourselve.
>
> I want a class that determines on instantiating its base classes
> dynamically. Consider the following two use cases
>
> a = Foo(['a', 'list']) # returns an instance that behaves like a list
> assert len(a) == 2
> assert a[0] == 'a'
> assert a == ['a', 'list']
> assert isinstance(a, list) # This would be nice, but no must-have
>
> b = Foo({'blah': 8}) # returns an instance that behaves like a dict
> assert b['blah'] == 'blah'
> assert b == {'blah': 8}
> assert isinstance(b, dict) # again, no must-have
>
> a.do_something() # common function to both instances as defined
> b.do_something() # in the Foo class
>
>
> What I'm currently doing something like the following:
>
> class Foo(object):
>
> def __init__(self, obj):
> self._obj = obj
>
> def __len__(self):
> return len(self._obj)
>
> def __getitem__(self, name):
> return self._obj[name]
>
> # …
>
> def do_something(self):
> # do something on self._obj
> pass
>
> Which seems ugly. Is there a way to provide the functions of `list'
> and `dict' in Foo's look-up path without having to write all the
> stubs myself?
>

Does Foo have to be a class? Couldn't it just be a factory function?
Reply With Quote
Alt Today
Advertising
 
and become member of Rhinocerus
Standard Sponsored Links

Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are Off
Refbacks are Off




All times are GMT. The time now is 08:28 AM.


Copyright ©2009

LinkBacks Enabled by vBSEO 3.3.0 RC2 © 2009, Crawlability, Inc.