summaryrefslogtreecommitdiffstats
path: root/Demo/metaclasses
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1997-09-11 22:54:49 (GMT)
committerGuido van Rossum <guido@python.org>1997-09-11 22:54:49 (GMT)
commit7ade6da8660a640651a7e37f1b77b2721045942b (patch)
tree1741911913398e95f718c198c5a742c779bff499 /Demo/metaclasses
parentabffd00502fd0ac84392ec44cf4d4c3b8d2c4d0e (diff)
downloadcpython-7ade6da8660a640651a7e37f1b77b2721045942b.zip
cpython-7ade6da8660a640651a7e37f1b77b2721045942b.tar.gz
cpython-7ade6da8660a640651a7e37f1b77b2721045942b.tar.bz2
As Paul Prescod pointed out, metaprogramming is really something
different (programs that write programs). We are dealing with metaclasses here. So change the words slightly.
Diffstat (limited to 'Demo/metaclasses')
-rw-r--r--Demo/metaclasses/index.html24
1 files changed, 11 insertions, 13 deletions
diff --git a/Demo/metaclasses/index.html b/Demo/metaclasses/index.html
index ee91f8f..52d52e9 100644
--- a/Demo/metaclasses/index.html
+++ b/Demo/metaclasses/index.html
@@ -1,18 +1,16 @@
<HTML>
<HEAD>
-<TITLE>Metaprogramming in Python 1.5</TITLE>
+<TITLE>Metaclasses in Python 1.5</TITLE>
</HEAD>
<BODY BGCOLOR="FFFFFF">
-<H1>Metaprogramming in Python 1.5 (DRAFT)</H1>
+<H1>Metaclasses in Python 1.5</H1>
+<H2>(A.k.a. The Killer Joke :-)</H2>
-<H4>XXX This is very much a work in progress.</H4>
-
-<P>While Python 1.5 is only out as a <A
-HREF="http://grail.cnri.reston.va.us/python/1.5a3/">restricted alpha
-release</A>, its metaprogramming feature is worth mentioning.
+<P><b>Note: this document describes a feature only released in <A
+HREF="../../1.5a3/">Python 1.5a3</A>.</b>
<P>In previous Python releases (and still in 1.5), there is something
called the ``Don Beaudry hook'', after its inventor and champion.
@@ -144,7 +142,7 @@ class C:
the class namespace's contents would be {'a': 1, 'f': &lt;function f
...&gt;}.
-<P>But enough already about Python metaprogramming in C; read the
+<P>But enough already about writing Python metaclasses in C; read the
documentation of <A
HREF="http://maigret.cog.brown.edu/pyutil/">MESS</A> or <A
HREF="http://www.digicool.com/papers/ExtensionClass.html" >Extension
@@ -153,7 +151,7 @@ Classes</A> for more information.
<H2>Writing Metaclasses in Python</H2>
<P>In Python 1.5, the requirement to write a C extension in order to
-engage in metaprogramming has been dropped (though you can still do
+write metaclasses has been dropped (though you can still do
it, of course). In addition to the check ``is the type of the base
class callable,'' there's a check ``does the base class have a
__class__ attribute.'' If so, it is assumed that the __class__
@@ -189,8 +187,8 @@ new (meta)inststance of the base class's metaclass.
<P>Going back to the example, the class B.__class__ is instantiated,
passing its constructor the same three arguments that are passed to
-the default class constructor or to an extension's metaprogramming
-code: <i>name</i>, <i>bases</i>, and <i>namespace</i>.
+the default class constructor or to an extension's metaclass:
+<i>name</i>, <i>bases</i>, and <i>namespace</i>.
<P>It is easy to be confused by what exactly happens when using a
metaclass, because we lose the absolute distinction between classes
@@ -244,7 +242,7 @@ How did this happen? MySpecialClass is an instance of MetaClass1
__call__ method is invoked, and presumably the __call__ method defined
by MetaClass1 returns an instance of HelperClass1.
-<P>Now let's see how we could use metaprogramming -- what can we do
+<P>Now let's see how we could use metaclasses -- what can we do
with metaclasses that we can't easily do without them? Here's one
idea: a metaclass could automatically insert trace calls for all
method calls. Let's first develop a simplified example, without
@@ -424,7 +422,7 @@ doesn't support all these features yet.
<H1>Real-life Examples</H1>
<P>Have a look at some very preliminary examples that I coded up to
-teach myself how to use metaprogramming:
+teach myself how to write metaclasses:
<DL>