Python recipes: list mixin, improved timeit, etc
Paul Rubin
http
Fri Oct 7 08:19:36 EDT 2005
Steven D'Aprano <steve at REMOVETHIScyber.com.au> writes:
> That looks great. Now, if only I understood mixins: what are they, and
> what they are for, and in particular, how they differ from mere
> subclassing.
I'm not sure what you mean by "mere subclassing" so maybe there is no
difference. Mixins are sort of a design pattern, not any whiz-tech
thing. The terminology comes from Flavors which was one of the early
multiple inheritance OOP systems. Flavors terminology was inspired by
ice cream: you could go to Tosci's and get plain ice cream, or ice
cream with your choice of various mix-ins like raisins, M&M's, heath
bar pieces, etc., which you could combine orthogonally. In Flavors
and in Python, mix-ins are superclasses that you inherit to turn on a
feature. The classic example is a Window class, with mixins for
scroll bars, title bars, pulldown menu, etc. So if you want a window
with a scroll bar, you'd say
class Window_with_scroll_bar(Window, Scrollbar): pass
and you'd get a class that understands the operations of both windows
and scroll bars. Flavors had automatic method combination that you
have to spell out manually in Python, making the scheme a little bit
less useful. But see SocketServer for a clever example of mixins to
implement concurrency in a TCP listener. The basic server class is
TCPServer and you inherit from ThreadingMixin to make a threading
server or ForkingMixin to make a forking server.
I guess what makes something a mix-in is that you normally don't
inherit from it directly. You inherit from some other class and the
mix-in is an "add-on" superclass that supplies some extra functionality.
More information about the Python-list
mailing list