Mixins allow you to add ("Mix in") code - usually shared code - from one class or module into another. They're a great way of providing great "light weight" multiple inheritance - I wrote about that
[here] recently, and provided an example in Ruby to show how it works.
Mixins can also be used in Python - see
[full example]. The "trick" here is to define the code to be mixed in as complete new classes, and to use Python's dynamic object structure to add in the new class by updating its __bases__ member:
pubtrans.__bases__ += (label,)
You may compare that example with mixins to a full multiple inheritance example in Python which uses the same classes - I provided that other full source
[here] and wrote about it
[here].
(written 2010-04-14)
Associated topics are indexed under
Y112 - Python - Objects - Intermediate [4094] Python Properties - how and why - (2013-05-18)
[4028] Really Simple Class and Inheritance example in Python - (2013-03-04)
[3887] Inheritance, Composition and Associated objects - when to use which - Python example - (2012-10-10)
[3796] Backquote, backtic, str and repr in Python - conversion object to string - (2012-07-05)
[3524] Metaclasses (Python) and Metatables (Lua) - (2011-11-17)
[3472] Static variables in functions - and better ways using objects - (2011-10-10)
[3442] A demonstration of how many Python facilities work together - (2011-09-16)
[3002] A list of special method and attribute names in Python - (2010-10-17)
[2994] Python - some common questions answered in code examples - (2010-10-10)
[2905] Defining static methods in Python - (2010-08-05)
[2889] Should Python classes each be in their own file? - (2010-07-27)
[2785] The Light bulb moment when people see how Object Orientation works in real use - (2010-05-28)
[2764] Python decorators - your own, staticmethod and classmethod - (2010-05-14)
[2720] Multiple inheritance in Python - complete working example - (2010-04-14)
[2717] The Multiple Inheritance Conundrum, interfaces and mixins - (2010-04-11)
[2693] Methods that run on classes (static methods) in Python - (2010-03-25)
[2485] How do I set up a constant in Python? - (2009-10-31)
[2409] TypeError: super() argument 1 must be type, not classobj (Python) - (2009-09-18)
[2368] Python - fresh examples of all the fundamentals - (2009-08-20)
[1819] Calling base class constructors - (2008-10-03)
[1661] Equality, sameness and identity - Python - (2008-05-31)
[1644] Using a utility method to construct objects of different types - Python - (2008-05-17)
[1517] Python - formatting objects - (2008-01-24)
[1217] What are factory and singleton classes? - (2007-06-04)
[1146] __new__ v __init__ - python constructor alternatives? - (2007-04-14)
[964] Practical polymorphism in action - (2006-12-04)
[903] Pieces of Python - (2006-10-23)
[831] Comparison of Object Oriented Philosophy - Python, Java, C++, Perl - (2006-08-13)
[656] Think about your design even if you don't use full UML - (2006-03-24)
[477] Class, static and unbound variables - (2005-10-25)
[383] Overloading of operators on standard objects in Python - (2005-07-19)
[296] Using a Python dictionary as a holder of object attributes - (2005-04-30)
55a9
Some other Articles
Every cloud has a silver liningHow do our tactics help us meet the strategy, for the greater good?Escapee Grandparents welcome - Henfield and MelkshamReturning multiple values from a function - LuaMixins example in PythonRegular Expressions in PythonTraffic lights in PythonPython - access to variables in the outer scope