[Tutor] question about metaclasses
Kent Johnson
kent37 at tds.net
Thu Jul 13 03:12:12 CEST 2006
anil maran wrote:
> hi pygurus
> can you please tell me why we need metaclasses and how to use them
Hmm...metaclasses are an advanced topic, first exposure to them usually
causes one's brain to explode. Fortunately the condition is only
temporary :-)
Basically a metaclass is the type of a class, or the type of a type.
Think about it this way - every object has a type. The type of 1 is int,
the type of 'a' is str.
In [16]: type(1)
Out[16]: <type 'int'>
In [17]: type('a')
Out[17]: <type 'str'>
Note that <type 'int'> is just the printed representation of the type int:
In [19]: type(1) == int
Out[19]: True
In [20]: print int
<type 'int'>
But int and str are themselves objects - what is their type?
In [18]: type(int)
Out[18]: <type 'type'>
In [21]: type(str)
Out[21]: <type 'type'>
Why might you care? In general, it is the type of an object that
determines its behaviour. The behaviour of an int is determined by the
int type. What determines the behaviour of a class? Its type! So if you
want to customize the behaviour of a class, you create a custom metatype
for the class.
That is a very brief introduction. Here are some relatively introductory
articles. You can find more examples by searching the Python Cookbook
and comp.lang.python for "metaclass". Don't expect to understand this
the first time.
http://www-128.ibm.com/developerworks/linux/library/l-pymeta.html
http://www-128.ibm.com/developerworks/linux/library/l-pymeta2/
Here is Guido's brief explanation:
http://www.python.org/download/releases/2.2.3/descrintro/#metaclasses
Kent
More information about the Tutor
mailing list