"A Metaclass (Python) or Metatable (Lua) adds extra code / data / behaviour to an object, table, or class."
What does that mean? It means that I can define a behavior that I want to be shared, that I want to define at run-time, that I want to amend ... in a separate module / zone / table from my main class. It's flexible, powerful. In Lua, it's a vital feature if you're looking to write code using an Object Oriented paradigm, as your metatable provides you with your methods which are able to be shared between objects. In Python, it's rather esoteric - yes, useful but you'll tend to write code which all but the most hardened of programmers will end up scratching their heads over.
Anyway - new Python examples
[here]. Lua example
[here], and a further description with examples
[here]. That latter example makes good reading on the principles for Python users as well as Lua users.
Our
Lua Courses all cover Metatables. Our
Python Courses do not at present cover metaclasses; your instructor will be happy to answer questions on them, demonstrate them if you ask, cover them on extra days or after class. He will raise them if they look to be useful based on your description of your applications .. but for the most part they're something that few Python application programmers will be using, however internally important they are -
and it's part of a trainer's job to pick out the important things for YOU! (written 2011-11-17, updated 2011-12-03)
Associated topics are indexed under
U107 - Object Orientation - the Lua way [3730] What is a metatable? How do I set one up? How do I use them? Lua - (2012-05-12)
[3727] Using Lua tables as objects - (2012-05-11)
[3694] Special __ methods you can use in Lua metatables - (2012-04-12)
[3683] Weak references in Lua - what are they, and why use them? - (2012-04-04)
[3396] Tables as Objects in Lua - a gentle introduction to data driven programming - (2011-08-17)
[3142] Private and Public - and things between - (2011-01-22)
[2710] __index and __newindex in Lua - metatable methods - (2010-04-05)
[2703] Lua Metatables - (2010-04-02)
[2701] Is Lua an Object Oriented language? - (2010-04-01)
[2455] Lua examples - coroutines, error handling, objects, etc - (2009-10-15)
[2359] A fresh example - objects the Lua way - (2009-08-13)
[2318] For Lua Programmers AND for Town Planners - (2009-08-02)
[1819] Calling base class constructors - (2008-10-03)
[1743] First class functions in Lua lead to powerful OO facilities - (2008-08-07)
[1699] If you are learning Lua, here are some more examples - (2008-07-06)
[1692] Towards Object Oriented Programming in Lua - (2008-06-30)
Y112 - Python - Objects - Intermediate [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)
[2722] Mixins example in Python - (2010-04-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)
[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)
Some other Articles
December courses - PHP, Python, Perl - and a weekend Lua courseMelksham - changing times, an opportunity for the futureMelksham has a Heart - Montage picture for saleMelksham has a heart - come and see the pictures. Sunday, 11 to 3, Assembly HallMetaclasses (Python) and Metatables (Lua)When competition is not a good idea - Melksham Bus AbsurdityNetworking - North and West Wilts FSB StyleEmergency First Aid at Work (HSE) training in Melksham - places available for 19.1.2012Quintessentially English - scenes from our Wiltshire townPython - current versions and implementations (CPython, Jython, IronPython etc)