blob: dddbb0c3fabae153df32b530687031a07c25e975 [file] [log] [blame]
Georg Brandl8ec7f652007-08-15 14:28:01 +00001.. _tut-classes:
2
3*******
4Classes
5*******
6
7Python's class mechanism adds classes to the language with a minimum of new
8syntax and semantics. It is a mixture of the class mechanisms found in C++ and
9Modula-3. As is true for modules, classes in Python do not put an absolute
10barrier between definition and user, but rather rely on the politeness of the
11user not to "break into the definition." The most important features of classes
12are retained with full power, however: the class inheritance mechanism allows
13multiple base classes, a derived class can override any methods of its base
14class or classes, and a method can call the method of a base class with the same
15name. Objects can contain an arbitrary amount of private data.
16
17In C++ terminology, all class members (including the data members) are *public*,
18and all member functions are *virtual*. There are no special constructors or
19destructors. As in Modula-3, there are no shorthands for referencing the
20object's members from its methods: the method function is declared with an
21explicit first argument representing the object, which is provided implicitly by
22the call. As in Smalltalk, classes themselves are objects, albeit in the wider
23sense of the word: in Python, all data types are objects. This provides
24semantics for importing and renaming. Unlike C++ and Modula-3, built-in types
25can be used as base classes for extension by the user. Also, like in C++ but
26unlike in Modula-3, most built-in operators with special syntax (arithmetic
27operators, subscripting etc.) can be redefined for class instances.
28
29
30.. _tut-terminology:
31
32A Word About Terminology
33========================
34
35Lacking universally accepted terminology to talk about classes, I will make
36occasional use of Smalltalk and C++ terms. (I would use Modula-3 terms, since
37its object-oriented semantics are closer to those of Python than C++, but I
38expect that few readers have heard of it.)
39
40Objects have individuality, and multiple names (in multiple scopes) can be bound
41to the same object. This is known as aliasing in other languages. This is
42usually not appreciated on a first glance at Python, and can be safely ignored
43when dealing with immutable basic types (numbers, strings, tuples). However,
44aliasing has an (intended!) effect on the semantics of Python code involving
45mutable objects such as lists, dictionaries, and most types representing
46entities outside the program (files, windows, etc.). This is usually used to
47the benefit of the program, since aliases behave like pointers in some respects.
48For example, passing an object is cheap since only a pointer is passed by the
49implementation; and if a function modifies an object passed as an argument, the
50caller will see the change --- this eliminates the need for two different
51argument passing mechanisms as in Pascal.
52
53
54.. _tut-scopes:
55
56Python Scopes and Name Spaces
57=============================
58
59Before introducing classes, I first have to tell you something about Python's
60scope rules. Class definitions play some neat tricks with namespaces, and you
61need to know how scopes and namespaces work to fully understand what's going on.
62Incidentally, knowledge about this subject is useful for any advanced Python
63programmer.
64
65Let's begin with some definitions.
66
67A *namespace* is a mapping from names to objects. Most namespaces are currently
68implemented as Python dictionaries, but that's normally not noticeable in any
69way (except for performance), and it may change in the future. Examples of
70namespaces are: the set of built-in names (functions such as :func:`abs`, and
71built-in exception names); the global names in a module; and the local names in
72a function invocation. In a sense the set of attributes of an object also form
73a namespace. The important thing to know about namespaces is that there is
74absolutely no relation between names in different namespaces; for instance, two
75different modules may both define a function "maximize" without confusion ---
76users of the modules must prefix it with the module name.
77
78By the way, I use the word *attribute* for any name following a dot --- for
79example, in the expression ``z.real``, ``real`` is an attribute of the object
80``z``. Strictly speaking, references to names in modules are attribute
81references: in the expression ``modname.funcname``, ``modname`` is a module
82object and ``funcname`` is an attribute of it. In this case there happens to be
83a straightforward mapping between the module's attributes and the global names
84defined in the module: they share the same namespace! [#]_
85
86Attributes may be read-only or writable. In the latter case, assignment to
87attributes is possible. Module attributes are writable: you can write
88``modname.the_answer = 42``. Writable attributes may also be deleted with the
89:keyword:`del` statement. For example, ``del modname.the_answer`` will remove
90the attribute :attr:`the_answer` from the object named by ``modname``.
91
92Name spaces are created at different moments and have different lifetimes. The
93namespace containing the built-in names is created when the Python interpreter
94starts up, and is never deleted. The global namespace for a module is created
95when the module definition is read in; normally, module namespaces also last
96until the interpreter quits. The statements executed by the top-level
97invocation of the interpreter, either read from a script file or interactively,
98are considered part of a module called :mod:`__main__`, so they have their own
99global namespace. (The built-in names actually also live in a module; this is
100called :mod:`__builtin__`.)
101
102The local namespace for a function is created when the function is called, and
103deleted when the function returns or raises an exception that is not handled
104within the function. (Actually, forgetting would be a better way to describe
105what actually happens.) Of course, recursive invocations each have their own
106local namespace.
107
108A *scope* is a textual region of a Python program where a namespace is directly
109accessible. "Directly accessible" here means that an unqualified reference to a
110name attempts to find the name in the namespace.
111
112Although scopes are determined statically, they are used dynamically. At any
113time during execution, there are at least three nested scopes whose namespaces
114are directly accessible: the innermost scope, which is searched first, contains
115the local names; the namespaces of any enclosing functions, which are searched
116starting with the nearest enclosing scope; the middle scope, searched next,
117contains the current module's global names; and the outermost scope (searched
118last) is the namespace containing built-in names.
119
120If a name is declared global, then all references and assignments go directly to
121the middle scope containing the module's global names. Otherwise, all variables
122found outside of the innermost scope are read-only (an attempt to write to such
123a variable will simply create a *new* local variable in the innermost scope,
124leaving the identically named outer variable unchanged).
125
Georg Brandl26bab5f2008-03-06 07:22:09 +0000126.. XXX mention nonlocal
127
Georg Brandl8ec7f652007-08-15 14:28:01 +0000128Usually, the local scope references the local names of the (textually) current
129function. Outside functions, the local scope references the same namespace as
130the global scope: the module's namespace. Class definitions place yet another
131namespace in the local scope.
132
133It is important to realize that scopes are determined textually: the global
134scope of a function defined in a module is that module's namespace, no matter
135from where or by what alias the function is called. On the other hand, the
136actual search for names is done dynamically, at run time --- however, the
137language definition is evolving towards static name resolution, at "compile"
138time, so don't rely on dynamic name resolution! (In fact, local variables are
139already determined statically.)
140
Georg Brandl26bab5f2008-03-06 07:22:09 +0000141A special quirk of Python is that -- if no :keyword:`global` or
142:keyword:`nonlocal` statement is in effect -- assignments to names always go
143into the innermost scope. Assignments do not copy data --- they just bind names
144to objects. The same is true for deletions: the statement ``del x`` removes the
145binding of ``x`` from the namespace referenced by the local scope. In fact, all
146operations that introduce new names use the local scope: in particular, import
147statements and function definitions bind the module or function name in the
148local scope. (The :keyword:`global` statement can be used to indicate that
149particular variables live in the global scope.)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000150
151
152.. _tut-firstclasses:
153
154A First Look at Classes
155=======================
156
157Classes introduce a little bit of new syntax, three new object types, and some
158new semantics.
159
160
161.. _tut-classdefinition:
162
163Class Definition Syntax
164-----------------------
165
166The simplest form of class definition looks like this::
167
168 class ClassName:
169 <statement-1>
170 .
171 .
172 .
173 <statement-N>
174
175Class definitions, like function definitions (:keyword:`def` statements) must be
176executed before they have any effect. (You could conceivably place a class
177definition in a branch of an :keyword:`if` statement, or inside a function.)
178
179In practice, the statements inside a class definition will usually be function
180definitions, but other statements are allowed, and sometimes useful --- we'll
181come back to this later. The function definitions inside a class normally have
182a peculiar form of argument list, dictated by the calling conventions for
183methods --- again, this is explained later.
184
185When a class definition is entered, a new namespace is created, and used as the
186local scope --- thus, all assignments to local variables go into this new
187namespace. In particular, function definitions bind the name of the new
188function here.
189
190When a class definition is left normally (via the end), a *class object* is
191created. This is basically a wrapper around the contents of the namespace
192created by the class definition; we'll learn more about class objects in the
193next section. The original local scope (the one in effect just before the class
194definition was entered) is reinstated, and the class object is bound here to the
195class name given in the class definition header (:class:`ClassName` in the
196example).
197
198
199.. _tut-classobjects:
200
201Class Objects
202-------------
203
204Class objects support two kinds of operations: attribute references and
205instantiation.
206
207*Attribute references* use the standard syntax used for all attribute references
208in Python: ``obj.name``. Valid attribute names are all the names that were in
209the class's namespace when the class object was created. So, if the class
210definition looked like this::
211
212 class MyClass:
213 "A simple example class"
214 i = 12345
215 def f(self):
216 return 'hello world'
217
218then ``MyClass.i`` and ``MyClass.f`` are valid attribute references, returning
219an integer and a function object, respectively. Class attributes can also be
220assigned to, so you can change the value of ``MyClass.i`` by assignment.
221:attr:`__doc__` is also a valid attribute, returning the docstring belonging to
222the class: ``"A simple example class"``.
223
224Class *instantiation* uses function notation. Just pretend that the class
225object is a parameterless function that returns a new instance of the class.
226For example (assuming the above class)::
227
228 x = MyClass()
229
230creates a new *instance* of the class and assigns this object to the local
231variable ``x``.
232
233The instantiation operation ("calling" a class object) creates an empty object.
234Many classes like to create objects with instances customized to a specific
235initial state. Therefore a class may define a special method named
236:meth:`__init__`, like this::
237
238 def __init__(self):
239 self.data = []
240
241When a class defines an :meth:`__init__` method, class instantiation
242automatically invokes :meth:`__init__` for the newly-created class instance. So
243in this example, a new, initialized instance can be obtained by::
244
245 x = MyClass()
246
247Of course, the :meth:`__init__` method may have arguments for greater
248flexibility. In that case, arguments given to the class instantiation operator
249are passed on to :meth:`__init__`. For example, ::
250
251 >>> class Complex:
252 ... def __init__(self, realpart, imagpart):
253 ... self.r = realpart
254 ... self.i = imagpart
255 ...
256 >>> x = Complex(3.0, -4.5)
257 >>> x.r, x.i
258 (3.0, -4.5)
259
260
261.. _tut-instanceobjects:
262
263Instance Objects
264----------------
265
266Now what can we do with instance objects? The only operations understood by
267instance objects are attribute references. There are two kinds of valid
268attribute names, data attributes and methods.
269
270*data attributes* correspond to "instance variables" in Smalltalk, and to "data
271members" in C++. Data attributes need not be declared; like local variables,
272they spring into existence when they are first assigned to. For example, if
273``x`` is the instance of :class:`MyClass` created above, the following piece of
274code will print the value ``16``, without leaving a trace::
275
276 x.counter = 1
277 while x.counter < 10:
278 x.counter = x.counter * 2
279 print x.counter
280 del x.counter
281
282The other kind of instance attribute reference is a *method*. A method is a
283function that "belongs to" an object. (In Python, the term method is not unique
284to class instances: other object types can have methods as well. For example,
285list objects have methods called append, insert, remove, sort, and so on.
286However, in the following discussion, we'll use the term method exclusively to
287mean methods of class instance objects, unless explicitly stated otherwise.)
288
289.. index:: object: method
290
291Valid method names of an instance object depend on its class. By definition,
292all attributes of a class that are function objects define corresponding
293methods of its instances. So in our example, ``x.f`` is a valid method
294reference, since ``MyClass.f`` is a function, but ``x.i`` is not, since
295``MyClass.i`` is not. But ``x.f`` is not the same thing as ``MyClass.f`` --- it
296is a *method object*, not a function object.
297
298
299.. _tut-methodobjects:
300
301Method Objects
302--------------
303
304Usually, a method is called right after it is bound::
305
306 x.f()
307
308In the :class:`MyClass` example, this will return the string ``'hello world'``.
309However, it is not necessary to call a method right away: ``x.f`` is a method
310object, and can be stored away and called at a later time. For example::
311
312 xf = x.f
313 while True:
314 print xf()
315
316will continue to print ``hello world`` until the end of time.
317
318What exactly happens when a method is called? You may have noticed that
319``x.f()`` was called without an argument above, even though the function
320definition for :meth:`f` specified an argument. What happened to the argument?
321Surely Python raises an exception when a function that requires an argument is
322called without any --- even if the argument isn't actually used...
323
324Actually, you may have guessed the answer: the special thing about methods is
325that the object is passed as the first argument of the function. In our
326example, the call ``x.f()`` is exactly equivalent to ``MyClass.f(x)``. In
327general, calling a method with a list of *n* arguments is equivalent to calling
328the corresponding function with an argument list that is created by inserting
329the method's object before the first argument.
330
331If you still don't understand how methods work, a look at the implementation can
332perhaps clarify matters. When an instance attribute is referenced that isn't a
333data attribute, its class is searched. If the name denotes a valid class
334attribute that is a function object, a method object is created by packing
335(pointers to) the instance object and the function object just found together in
336an abstract object: this is the method object. When the method object is called
337with an argument list, it is unpacked again, a new argument list is constructed
338from the instance object and the original argument list, and the function object
339is called with this new argument list.
340
341
342.. _tut-remarks:
343
344Random Remarks
345==============
346
Georg Brandlb19be572007-12-29 10:57:00 +0000347.. These should perhaps be placed more carefully...
Georg Brandl8ec7f652007-08-15 14:28:01 +0000348
349Data attributes override method attributes with the same name; to avoid
350accidental name conflicts, which may cause hard-to-find bugs in large programs,
351it is wise to use some kind of convention that minimizes the chance of
352conflicts. Possible conventions include capitalizing method names, prefixing
353data attribute names with a small unique string (perhaps just an underscore), or
354using verbs for methods and nouns for data attributes.
355
356Data attributes may be referenced by methods as well as by ordinary users
357("clients") of an object. In other words, classes are not usable to implement
358pure abstract data types. In fact, nothing in Python makes it possible to
359enforce data hiding --- it is all based upon convention. (On the other hand,
360the Python implementation, written in C, can completely hide implementation
361details and control access to an object if necessary; this can be used by
362extensions to Python written in C.)
363
364Clients should use data attributes with care --- clients may mess up invariants
365maintained by the methods by stamping on their data attributes. Note that
366clients may add data attributes of their own to an instance object without
367affecting the validity of the methods, as long as name conflicts are avoided ---
368again, a naming convention can save a lot of headaches here.
369
370There is no shorthand for referencing data attributes (or other methods!) from
371within methods. I find that this actually increases the readability of methods:
372there is no chance of confusing local variables and instance variables when
373glancing through a method.
374
375Often, the first argument of a method is called ``self``. This is nothing more
376than a convention: the name ``self`` has absolutely no special meaning to
377Python. (Note, however, that by not following the convention your code may be
378less readable to other Python programmers, and it is also conceivable that a
379*class browser* program might be written that relies upon such a convention.)
380
381Any function object that is a class attribute defines a method for instances of
382that class. It is not necessary that the function definition is textually
383enclosed in the class definition: assigning a function object to a local
384variable in the class is also ok. For example::
385
386 # Function defined outside the class
387 def f1(self, x, y):
388 return min(x, x+y)
389
390 class C:
391 f = f1
392 def g(self):
393 return 'hello world'
394 h = g
395
396Now ``f``, ``g`` and ``h`` are all attributes of class :class:`C` that refer to
397function objects, and consequently they are all methods of instances of
398:class:`C` --- ``h`` being exactly equivalent to ``g``. Note that this practice
399usually only serves to confuse the reader of a program.
400
401Methods may call other methods by using method attributes of the ``self``
402argument::
403
404 class Bag:
405 def __init__(self):
406 self.data = []
407 def add(self, x):
408 self.data.append(x)
409 def addtwice(self, x):
410 self.add(x)
411 self.add(x)
412
413Methods may reference global names in the same way as ordinary functions. The
414global scope associated with a method is the module containing the class
415definition. (The class itself is never used as a global scope!) While one
416rarely encounters a good reason for using global data in a method, there are
417many legitimate uses of the global scope: for one thing, functions and modules
418imported into the global scope can be used by methods, as well as functions and
419classes defined in it. Usually, the class containing the method is itself
420defined in this global scope, and in the next section we'll find some good
421reasons why a method would want to reference its own class!
422
Georg Brandl6c45dc12008-03-06 07:31:34 +0000423Each value is an object, and therefore has a *class* (also called its *type*).
424It is stored as ``object.__class__``.
425
Georg Brandl8ec7f652007-08-15 14:28:01 +0000426
427.. _tut-inheritance:
428
429Inheritance
430===========
431
432Of course, a language feature would not be worthy of the name "class" without
433supporting inheritance. The syntax for a derived class definition looks like
434this::
435
436 class DerivedClassName(BaseClassName):
437 <statement-1>
438 .
439 .
440 .
441 <statement-N>
442
443The name :class:`BaseClassName` must be defined in a scope containing the
444derived class definition. In place of a base class name, other arbitrary
445expressions are also allowed. This can be useful, for example, when the base
446class is defined in another module::
447
448 class DerivedClassName(modname.BaseClassName):
449
450Execution of a derived class definition proceeds the same as for a base class.
451When the class object is constructed, the base class is remembered. This is
452used for resolving attribute references: if a requested attribute is not found
453in the class, the search proceeds to look in the base class. This rule is
454applied recursively if the base class itself is derived from some other class.
455
456There's nothing special about instantiation of derived classes:
457``DerivedClassName()`` creates a new instance of the class. Method references
458are resolved as follows: the corresponding class attribute is searched,
459descending down the chain of base classes if necessary, and the method reference
460is valid if this yields a function object.
461
462Derived classes may override methods of their base classes. Because methods
463have no special privileges when calling other methods of the same object, a
464method of a base class that calls another method defined in the same base class
465may end up calling a method of a derived class that overrides it. (For C++
Georg Brandlb19be572007-12-29 10:57:00 +0000466programmers: all methods in Python are effectively ``virtual``.)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000467
468An overriding method in a derived class may in fact want to extend rather than
469simply replace the base class method of the same name. There is a simple way to
470call the base class method directly: just call ``BaseClassName.methodname(self,
471arguments)``. This is occasionally useful to clients as well. (Note that this
472only works if the base class is defined or imported directly in the global
473scope.)
474
Georg Brandl6c45dc12008-03-06 07:31:34 +0000475Python has two builtin functions that work with inheritance:
476
477* Use :func:`isinstance` to check an object's type: ``isinstance(obj, int)``
478 will be ``True`` only if ``obj.__class__`` is :class:`int` or some class
479 derived from :class:`int`.
480
481* Use :func:`issubclass` to check class inheritance: ``issubclass(bool, int)``
482 is ``True`` since :class:`bool` is a subclass of :class:`int`. However,
483 ``issubclass(unicode, str)`` is ``False`` since :class:`unicode` is not a
484 subclass of :class:`str` (they only share a common ancestor,
485 :class:`basestring`).
486
487
Georg Brandl8ec7f652007-08-15 14:28:01 +0000488
489.. _tut-multiple:
490
491Multiple Inheritance
492--------------------
493
494Python supports a limited form of multiple inheritance as well. A class
495definition with multiple base classes looks like this::
496
497 class DerivedClassName(Base1, Base2, Base3):
498 <statement-1>
499 .
500 .
501 .
502 <statement-N>
503
504For old-style classes, the only rule is depth-first, left-to-right. Thus, if an
505attribute is not found in :class:`DerivedClassName`, it is searched in
506:class:`Base1`, then (recursively) in the base classes of :class:`Base1`, and
507only if it is not found there, it is searched in :class:`Base2`, and so on.
508
509(To some people breadth first --- searching :class:`Base2` and :class:`Base3`
510before the base classes of :class:`Base1` --- looks more natural. However, this
511would require you to know whether a particular attribute of :class:`Base1` is
512actually defined in :class:`Base1` or in one of its base classes before you can
513figure out the consequences of a name conflict with an attribute of
514:class:`Base2`. The depth-first rule makes no differences between direct and
515inherited attributes of :class:`Base1`.)
516
Georg Brandla7395032007-10-21 12:15:05 +0000517For :term:`new-style class`\es, the method resolution order changes dynamically
518to support cooperative calls to :func:`super`. This approach is known in some
Georg Brandl8ec7f652007-08-15 14:28:01 +0000519other multiple-inheritance languages as call-next-method and is more powerful
520than the super call found in single-inheritance languages.
521
522With new-style classes, dynamic ordering is necessary because all cases of
523multiple inheritance exhibit one or more diamond relationships (where one at
524least one of the parent classes can be accessed through multiple paths from the
525bottommost class). For example, all new-style classes inherit from
526:class:`object`, so any case of multiple inheritance provides more than one path
527to reach :class:`object`. To keep the base classes from being accessed more
528than once, the dynamic algorithm linearizes the search order in a way that
529preserves the left-to-right ordering specified in each class, that calls each
530parent only once, and that is monotonic (meaning that a class can be subclassed
531without affecting the precedence order of its parents). Taken together, these
532properties make it possible to design reliable and extensible classes with
533multiple inheritance. For more detail, see
534http://www.python.org/download/releases/2.3/mro/.
535
536
537.. _tut-private:
538
539Private Variables
540=================
541
542There is limited support for class-private identifiers. Any identifier of the
543form ``__spam`` (at least two leading underscores, at most one trailing
544underscore) is textually replaced with ``_classname__spam``, where ``classname``
545is the current class name with leading underscore(s) stripped. This mangling is
546done without regard to the syntactic position of the identifier, so it can be
547used to define class-private instance and class variables, methods, variables
548stored in globals, and even variables stored in instances. private to this class
549on instances of *other* classes. Truncation may occur when the mangled name
550would be longer than 255 characters. Outside classes, or when the class name
551consists of only underscores, no mangling occurs.
552
553Name mangling is intended to give classes an easy way to define "private"
554instance variables and methods, without having to worry about instance variables
555defined by derived classes, or mucking with instance variables by code outside
556the class. Note that the mangling rules are designed mostly to avoid accidents;
557it still is possible for a determined soul to access or modify a variable that
558is considered private. This can even be useful in special circumstances, such
559as in the debugger, and that's one reason why this loophole is not closed.
560(Buglet: derivation of a class with the same name as the base class makes use of
561private variables of the base class possible.)
562
563Notice that code passed to ``exec``, ``eval()`` or ``execfile()`` does not
564consider the classname of the invoking class to be the current class; this is
565similar to the effect of the ``global`` statement, the effect of which is
566likewise restricted to code that is byte-compiled together. The same
567restriction applies to ``getattr()``, ``setattr()`` and ``delattr()``, as well
568as when referencing ``__dict__`` directly.
569
570
571.. _tut-odds:
572
573Odds and Ends
574=============
575
576Sometimes it is useful to have a data type similar to the Pascal "record" or C
577"struct", bundling together a few named data items. An empty class definition
578will do nicely::
579
580 class Employee:
581 pass
582
583 john = Employee() # Create an empty employee record
584
585 # Fill the fields of the record
586 john.name = 'John Doe'
587 john.dept = 'computer lab'
588 john.salary = 1000
589
590A piece of Python code that expects a particular abstract data type can often be
591passed a class that emulates the methods of that data type instead. For
592instance, if you have a function that formats some data from a file object, you
593can define a class with methods :meth:`read` and :meth:`readline` that get the
594data from a string buffer instead, and pass it as an argument.
595
Georg Brandlb19be572007-12-29 10:57:00 +0000596.. (Unfortunately, this technique has its limitations: a class can't define
597 operations that are accessed by special syntax such as sequence subscripting
598 or arithmetic operators, and assigning such a "pseudo-file" to sys.stdin will
599 not cause the interpreter to read further input from it.)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000600
601Instance method objects have attributes, too: ``m.im_self`` is the instance
602object with the method :meth:`m`, and ``m.im_func`` is the function object
603corresponding to the method.
604
605
606.. _tut-exceptionclasses:
607
608Exceptions Are Classes Too
609==========================
610
611User-defined exceptions are identified by classes as well. Using this mechanism
612it is possible to create extensible hierarchies of exceptions.
613
614There are two new valid (semantic) forms for the raise statement::
615
616 raise Class, instance
617
618 raise instance
619
620In the first form, ``instance`` must be an instance of :class:`Class` or of a
621class derived from it. The second form is a shorthand for::
622
623 raise instance.__class__, instance
624
625A class in an except clause is compatible with an exception if it is the same
626class or a base class thereof (but not the other way around --- an except clause
627listing a derived class is not compatible with a base class). For example, the
628following code will print B, C, D in that order::
629
630 class B:
631 pass
632 class C(B):
633 pass
634 class D(C):
635 pass
636
637 for c in [B, C, D]:
638 try:
639 raise c()
640 except D:
641 print "D"
642 except C:
643 print "C"
644 except B:
645 print "B"
646
647Note that if the except clauses were reversed (with ``except B`` first), it
648would have printed B, B, B --- the first matching except clause is triggered.
649
650When an error message is printed for an unhandled exception, the exception's
651class name is printed, then a colon and a space, and finally the instance
652converted to a string using the built-in function :func:`str`.
653
654
655.. _tut-iterators:
656
657Iterators
658=========
659
660By now you have probably noticed that most container objects can be looped over
661using a :keyword:`for` statement::
662
663 for element in [1, 2, 3]:
664 print element
665 for element in (1, 2, 3):
666 print element
667 for key in {'one':1, 'two':2}:
668 print key
669 for char in "123":
670 print char
671 for line in open("myfile.txt"):
672 print line
673
674This style of access is clear, concise, and convenient. The use of iterators
675pervades and unifies Python. Behind the scenes, the :keyword:`for` statement
676calls :func:`iter` on the container object. The function returns an iterator
677object that defines the method :meth:`next` which accesses elements in the
678container one at a time. When there are no more elements, :meth:`next` raises a
679:exc:`StopIteration` exception which tells the :keyword:`for` loop to terminate.
680This example shows how it all works::
681
682 >>> s = 'abc'
683 >>> it = iter(s)
684 >>> it
685 <iterator object at 0x00A1DB50>
686 >>> it.next()
687 'a'
688 >>> it.next()
689 'b'
690 >>> it.next()
691 'c'
692 >>> it.next()
693
694 Traceback (most recent call last):
695 File "<stdin>", line 1, in ?
696 it.next()
697 StopIteration
698
699Having seen the mechanics behind the iterator protocol, it is easy to add
700iterator behavior to your classes. Define a :meth:`__iter__` method which
701returns an object with a :meth:`next` method. If the class defines
702:meth:`next`, then :meth:`__iter__` can just return ``self``::
703
704 class Reverse:
705 "Iterator for looping over a sequence backwards"
706 def __init__(self, data):
707 self.data = data
708 self.index = len(data)
709 def __iter__(self):
710 return self
711 def next(self):
712 if self.index == 0:
713 raise StopIteration
714 self.index = self.index - 1
715 return self.data[self.index]
716
717 >>> for char in Reverse('spam'):
718 ... print char
719 ...
720 m
721 a
722 p
723 s
724
725
726.. _tut-generators:
727
728Generators
729==========
730
Georg Brandlcf3fb252007-10-21 10:52:38 +0000731:term:`Generator`\s are a simple and powerful tool for creating iterators. They
732are written like regular functions but use the :keyword:`yield` statement
733whenever they want to return data. Each time :meth:`next` is called, the
734generator resumes where it left-off (it remembers all the data values and which
735statement was last executed). An example shows that generators can be trivially
736easy to create::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000737
738 def reverse(data):
739 for index in range(len(data)-1, -1, -1):
740 yield data[index]
741
742 >>> for char in reverse('golf'):
743 ... print char
744 ...
745 f
746 l
747 o
748 g
749
750Anything that can be done with generators can also be done with class based
751iterators as described in the previous section. What makes generators so
752compact is that the :meth:`__iter__` and :meth:`next` methods are created
753automatically.
754
755Another key feature is that the local variables and execution state are
756automatically saved between calls. This made the function easier to write and
757much more clear than an approach using instance variables like ``self.index``
758and ``self.data``.
759
760In addition to automatic method creation and saving program state, when
761generators terminate, they automatically raise :exc:`StopIteration`. In
762combination, these features make it easy to create iterators with no more effort
763than writing a regular function.
764
765
766.. _tut-genexps:
767
768Generator Expressions
769=====================
770
771Some simple generators can be coded succinctly as expressions using a syntax
772similar to list comprehensions but with parentheses instead of brackets. These
773expressions are designed for situations where the generator is used right away
774by an enclosing function. Generator expressions are more compact but less
775versatile than full generator definitions and tend to be more memory friendly
776than equivalent list comprehensions.
777
778Examples::
779
780 >>> sum(i*i for i in range(10)) # sum of squares
781 285
782
783 >>> xvec = [10, 20, 30]
784 >>> yvec = [7, 5, 3]
785 >>> sum(x*y for x,y in zip(xvec, yvec)) # dot product
786 260
787
788 >>> from math import pi, sin
789 >>> sine_table = dict((x, sin(x*pi/180)) for x in range(0, 91))
790
791 >>> unique_words = set(word for line in page for word in line.split())
792
793 >>> valedictorian = max((student.gpa, student.name) for student in graduates)
794
795 >>> data = 'golf'
796 >>> list(data[i] for i in range(len(data)-1,-1,-1))
797 ['f', 'l', 'o', 'g']
798
799
800
801.. rubric:: Footnotes
802
803.. [#] Except for one thing. Module objects have a secret read-only attribute called
804 :attr:`__dict__` which returns the dictionary used to implement the module's
805 namespace; the name :attr:`__dict__` is an attribute but not a global name.
806 Obviously, using this violates the abstraction of namespace implementation, and
807 should be restricted to things like post-mortem debuggers.
808