On Thu, 20 Sep 2007 14:52:50 +1000, Ben Finney wrote: > Can you give a code example of how you think mixins should be > implemented in Python, assuming the absence of multiple inheritance?
I'll take a shot at it... use automatic delegation to the mixin class. class Parrot(object): def fly(self): return "The parrot can fly short distances." def talk(self): return "I'm pining for the fjords." class Albatross(object): def fly(self): return "The albatross is known to fly enormous distances." # Now I want a talking Albatross, without using multiple inheritance. class TalkingAlbatross(Albatross): def __init__(self, *args, **kwargs): # avoid triggering __setargs__ self.__dict__['mixin'] = Parrot() # avoid using super() so Ben doesn't get cranky self.__class__.__base__.__init__(self, *args, **kwargs) def __getattr__(self, name): return getattr(self.mixin, name) def __hasattr__(self, name): return hasattr(self.mixin, name) def __delattr__(self, name): return delattr(self.mixin, name) def __setattr__(self, name, value): return setattr(self.mixin, name, value) Am I close? -- Steven. -- http://mail.python.org/mailman/listinfo/python-list