On Sep 20, 4:55 am, Ben Finney <[EMAIL PROTECTED]> wrote: > Michele Simionato <[EMAIL PROTECTED]> writes: > > I am not against mixins (even if I am certainly very much against > > the *abuse* of mixins, such as in Zope 2). What I would advocate > > (but I realize that it will never happen in Python) is single > > inheritance + mixins a la Ruby. > > For those unfamiliar with Ruby, could you explain how you see this > being done in Python?
I don't see this being done in Python, it is too late now (for backward compatibility and all that). But you can still do it by yourself, the simplest thing being copying the methods of the mixin class. It is already possible to use a syntax like this class MyClass(Base): mixin(Mixin1, Mixin2, ...) using P.J. Eby's trick for implementing what he calls class decorators (see also http://www.phyast.pitt.edu/~micheles/python/classinitializer.html) But I would not use it, let's use the language we have, not to invent our own. > What do you see as an appropriate use of mixin classes, and what an > abuse? An example of fine usage of mixin is Tkinter; an example of bad usage if Zope 2. In any case, I think using composition in the end is a better solution than mixins (it is much more scalable). > What would the semantics be in Python for "single inheritance + mixins > a la Ruby"? Can you give example syntax? > Already done. Since all hierarchies would be flat, super syntax would be trivial as in Ruby/Java/etc (self.super.meth(args, kw)). Michele Simionato -- http://mail.python.org/mailman/listinfo/python-list