blob: d82adf6f220296602262c9a8ed0322a194fec5f0 [file] [log] [blame]
Georg Brandl8ec7f652007-08-15 14:28:01 +00001.. _tut-classes:
2
3*******
4Classes
5*******
6
Georg Brandlb8d0e362010-11-26 07:53:50 +00007Compared with other programming languages, Python's class mechanism adds classes
8with a minimum of new syntax and semantics. It is a mixture of the class
9mechanisms found in C++ and Modula-3. Python classes provide all the standard
10features of Object Oriented Programming: the class inheritance mechanism allows
Georg Brandl8ec7f652007-08-15 14:28:01 +000011multiple base classes, a derived class can override any methods of its base
12class or classes, and a method can call the method of a base class with the same
Georg Brandlb8d0e362010-11-26 07:53:50 +000013name. Objects can contain arbitrary amounts and kinds of data. As is true for
14modules, classes partake of the dynamic nature of Python: they are created at
15runtime, and can be modified further after creation.
Georg Brandl8ec7f652007-08-15 14:28:01 +000016
Georg Brandlb8d0e362010-11-26 07:53:50 +000017In C++ terminology, normally class members (including the data members) are
18*public* (except see below :ref:`tut-private`), and all member functions are
19*virtual*. As in Modula-3, there are no shorthands for referencing the object's
20members from its methods: the method function is declared with an explicit first
21argument representing the object, which is provided implicitly by the call. As
22in Smalltalk, classes themselves are objects. This provides semantics for
23importing and renaming. Unlike C++ and Modula-3, built-in types can be used as
24base classes for extension by the user. Also, like in C++, most built-in
25operators with special syntax (arithmetic operators, subscripting etc.) can be
26redefined for class instances.
Georg Brandl8ec7f652007-08-15 14:28:01 +000027
Georg Brandl4938fef2009-07-29 17:50:25 +000028(Lacking universally accepted terminology to talk about classes, I will make
29occasional use of Smalltalk and C++ terms. I would use Modula-3 terms, since
Georg Brandl8ec7f652007-08-15 14:28:01 +000030its object-oriented semantics are closer to those of Python than C++, but I
31expect that few readers have heard of it.)
32
Georg Brandl4938fef2009-07-29 17:50:25 +000033
34.. _tut-object:
35
36A Word About Names and Objects
37==============================
38
Georg Brandl8ec7f652007-08-15 14:28:01 +000039Objects have individuality, and multiple names (in multiple scopes) can be bound
40to the same object. This is known as aliasing in other languages. This is
41usually not appreciated on a first glance at Python, and can be safely ignored
42when dealing with immutable basic types (numbers, strings, tuples). However,
Georg Brandl4938fef2009-07-29 17:50:25 +000043aliasing has a possibly surprising effect on the semantics of Python code
44involving mutable objects such as lists, dictionaries, and most other types.
45This is usually used to the benefit of the program, since aliases behave like
46pointers in some respects. For example, passing an object is cheap since only a
47pointer is passed by the implementation; and if a function modifies an object
48passed as an argument, the caller will see the change --- this eliminates the
49need for two different argument passing mechanisms as in Pascal.
Georg Brandl8ec7f652007-08-15 14:28:01 +000050
51
52.. _tut-scopes:
53
Georg Brandl0cfbd652009-08-24 17:20:40 +000054Python Scopes and Namespaces
55============================
Georg Brandl8ec7f652007-08-15 14:28:01 +000056
57Before introducing classes, I first have to tell you something about Python's
58scope rules. Class definitions play some neat tricks with namespaces, and you
59need to know how scopes and namespaces work to fully understand what's going on.
60Incidentally, knowledge about this subject is useful for any advanced Python
61programmer.
62
63Let's begin with some definitions.
64
65A *namespace* is a mapping from names to objects. Most namespaces are currently
66implemented as Python dictionaries, but that's normally not noticeable in any
67way (except for performance), and it may change in the future. Examples of
Georg Brandl7d4bfb32010-08-02 21:44:25 +000068namespaces are: the set of built-in names (containing functions such as :func:`abs`, and
Georg Brandl8ec7f652007-08-15 14:28:01 +000069built-in exception names); the global names in a module; and the local names in
70a function invocation. In a sense the set of attributes of an object also form
71a namespace. The important thing to know about namespaces is that there is
72absolutely no relation between names in different namespaces; for instance, two
Georg Brandl4938fef2009-07-29 17:50:25 +000073different modules may both define a function ``maximize`` without confusion ---
Georg Brandl8ec7f652007-08-15 14:28:01 +000074users of the modules must prefix it with the module name.
75
76By the way, I use the word *attribute* for any name following a dot --- for
77example, in the expression ``z.real``, ``real`` is an attribute of the object
78``z``. Strictly speaking, references to names in modules are attribute
79references: in the expression ``modname.funcname``, ``modname`` is a module
80object and ``funcname`` is an attribute of it. In this case there happens to be
81a straightforward mapping between the module's attributes and the global names
82defined in the module: they share the same namespace! [#]_
83
84Attributes may be read-only or writable. In the latter case, assignment to
85attributes is possible. Module attributes are writable: you can write
86``modname.the_answer = 42``. Writable attributes may also be deleted with the
87:keyword:`del` statement. For example, ``del modname.the_answer`` will remove
88the attribute :attr:`the_answer` from the object named by ``modname``.
89
Georg Brandl0cfbd652009-08-24 17:20:40 +000090Namespaces are created at different moments and have different lifetimes. The
Georg Brandl8ec7f652007-08-15 14:28:01 +000091namespace containing the built-in names is created when the Python interpreter
92starts up, and is never deleted. The global namespace for a module is created
93when the module definition is read in; normally, module namespaces also last
94until the interpreter quits. The statements executed by the top-level
95invocation of the interpreter, either read from a script file or interactively,
96are considered part of a module called :mod:`__main__`, so they have their own
97global namespace. (The built-in names actually also live in a module; this is
98called :mod:`__builtin__`.)
99
100The local namespace for a function is created when the function is called, and
101deleted when the function returns or raises an exception that is not handled
102within the function. (Actually, forgetting would be a better way to describe
103what actually happens.) Of course, recursive invocations each have their own
104local namespace.
105
106A *scope* is a textual region of a Python program where a namespace is directly
107accessible. "Directly accessible" here means that an unqualified reference to a
108name attempts to find the name in the namespace.
109
110Although scopes are determined statically, they are used dynamically. At any
111time during execution, there are at least three nested scopes whose namespaces
Georg Brandl4938fef2009-07-29 17:50:25 +0000112are directly accessible:
113
114* the innermost scope, which is searched first, contains the local names
115* the scopes of any enclosing functions, which are searched starting with the
116 nearest enclosing scope, contains non-local, but also non-global names
117* the next-to-last scope contains the current module's global names
118* the outermost scope (searched last) is the namespace containing built-in names
Georg Brandl8ec7f652007-08-15 14:28:01 +0000119
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
126Usually, the local scope references the local names of the (textually) current
127function. Outside functions, the local scope references the same namespace as
128the global scope: the module's namespace. Class definitions place yet another
129namespace in the local scope.
130
131It is important to realize that scopes are determined textually: the global
132scope of a function defined in a module is that module's namespace, no matter
133from where or by what alias the function is called. On the other hand, the
134actual search for names is done dynamically, at run time --- however, the
135language definition is evolving towards static name resolution, at "compile"
136time, so don't rely on dynamic name resolution! (In fact, local variables are
137already determined statically.)
138
Georg Brandl4938fef2009-07-29 17:50:25 +0000139A special quirk of Python is that -- if no :keyword:`global` statement is in
140effect -- assignments to names always go into the innermost scope. Assignments
141do not copy data --- they just bind names to objects. The same is true for
142deletions: the statement ``del x`` removes the binding of ``x`` from the
143namespace referenced by the local scope. In fact, all operations that introduce
144new names use the local scope: in particular, :keyword:`import` statements and
145function definitions bind the module or function name in the local scope. (The
146:keyword:`global` statement can be used to indicate that particular variables
147live in the global scope.)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000148
149
150.. _tut-firstclasses:
151
152A First Look at Classes
153=======================
154
155Classes introduce a little bit of new syntax, three new object types, and some
156new semantics.
157
158
159.. _tut-classdefinition:
160
161Class Definition Syntax
162-----------------------
163
164The simplest form of class definition looks like this::
165
166 class ClassName:
167 <statement-1>
168 .
169 .
170 .
171 <statement-N>
172
173Class definitions, like function definitions (:keyword:`def` statements) must be
174executed before they have any effect. (You could conceivably place a class
175definition in a branch of an :keyword:`if` statement, or inside a function.)
176
177In practice, the statements inside a class definition will usually be function
178definitions, but other statements are allowed, and sometimes useful --- we'll
179come back to this later. The function definitions inside a class normally have
180a peculiar form of argument list, dictated by the calling conventions for
181methods --- again, this is explained later.
182
183When a class definition is entered, a new namespace is created, and used as the
184local scope --- thus, all assignments to local variables go into this new
185namespace. In particular, function definitions bind the name of the new
186function here.
187
188When a class definition is left normally (via the end), a *class object* is
189created. This is basically a wrapper around the contents of the namespace
190created by the class definition; we'll learn more about class objects in the
191next section. The original local scope (the one in effect just before the class
192definition was entered) is reinstated, and the class object is bound here to the
193class name given in the class definition header (:class:`ClassName` in the
194example).
195
196
197.. _tut-classobjects:
198
199Class Objects
200-------------
201
202Class objects support two kinds of operations: attribute references and
203instantiation.
204
205*Attribute references* use the standard syntax used for all attribute references
206in Python: ``obj.name``. Valid attribute names are all the names that were in
207the class's namespace when the class object was created. So, if the class
208definition looked like this::
209
210 class MyClass:
Georg Brandl3ce0dee2008-09-13 17:18:11 +0000211 """A simple example class"""
Georg Brandl8ec7f652007-08-15 14:28:01 +0000212 i = 12345
213 def f(self):
214 return 'hello world'
215
216then ``MyClass.i`` and ``MyClass.f`` are valid attribute references, returning
217an integer and a function object, respectively. Class attributes can also be
218assigned to, so you can change the value of ``MyClass.i`` by assignment.
219:attr:`__doc__` is also a valid attribute, returning the docstring belonging to
220the class: ``"A simple example class"``.
221
222Class *instantiation* uses function notation. Just pretend that the class
223object is a parameterless function that returns a new instance of the class.
224For example (assuming the above class)::
225
226 x = MyClass()
227
228creates a new *instance* of the class and assigns this object to the local
229variable ``x``.
230
231The instantiation operation ("calling" a class object) creates an empty object.
232Many classes like to create objects with instances customized to a specific
233initial state. Therefore a class may define a special method named
234:meth:`__init__`, like this::
235
236 def __init__(self):
237 self.data = []
238
239When a class defines an :meth:`__init__` method, class instantiation
240automatically invokes :meth:`__init__` for the newly-created class instance. So
241in this example, a new, initialized instance can be obtained by::
242
243 x = MyClass()
244
245Of course, the :meth:`__init__` method may have arguments for greater
246flexibility. In that case, arguments given to the class instantiation operator
247are passed on to :meth:`__init__`. For example, ::
248
249 >>> class Complex:
250 ... def __init__(self, realpart, imagpart):
251 ... self.r = realpart
252 ... self.i = imagpart
Georg Brandlc62ef8b2009-01-03 20:55:06 +0000253 ...
Georg Brandl8ec7f652007-08-15 14:28:01 +0000254 >>> x = Complex(3.0, -4.5)
255 >>> x.r, x.i
256 (3.0, -4.5)
257
258
259.. _tut-instanceobjects:
260
261Instance Objects
262----------------
263
264Now what can we do with instance objects? The only operations understood by
265instance objects are attribute references. There are two kinds of valid
266attribute names, data attributes and methods.
267
268*data attributes* correspond to "instance variables" in Smalltalk, and to "data
269members" in C++. Data attributes need not be declared; like local variables,
270they spring into existence when they are first assigned to. For example, if
271``x`` is the instance of :class:`MyClass` created above, the following piece of
272code will print the value ``16``, without leaving a trace::
273
274 x.counter = 1
275 while x.counter < 10:
276 x.counter = x.counter * 2
277 print x.counter
278 del x.counter
279
280The other kind of instance attribute reference is a *method*. A method is a
281function that "belongs to" an object. (In Python, the term method is not unique
282to class instances: other object types can have methods as well. For example,
283list objects have methods called append, insert, remove, sort, and so on.
284However, in the following discussion, we'll use the term method exclusively to
285mean methods of class instance objects, unless explicitly stated otherwise.)
286
287.. index:: object: method
288
289Valid method names of an instance object depend on its class. By definition,
290all attributes of a class that are function objects define corresponding
291methods of its instances. So in our example, ``x.f`` is a valid method
292reference, since ``MyClass.f`` is a function, but ``x.i`` is not, since
293``MyClass.i`` is not. But ``x.f`` is not the same thing as ``MyClass.f`` --- it
294is a *method object*, not a function object.
295
296
297.. _tut-methodobjects:
298
299Method Objects
300--------------
301
302Usually, a method is called right after it is bound::
303
304 x.f()
305
306In the :class:`MyClass` example, this will return the string ``'hello world'``.
307However, it is not necessary to call a method right away: ``x.f`` is a method
308object, and can be stored away and called at a later time. For example::
309
310 xf = x.f
311 while True:
312 print xf()
313
314will continue to print ``hello world`` until the end of time.
315
316What exactly happens when a method is called? You may have noticed that
317``x.f()`` was called without an argument above, even though the function
318definition for :meth:`f` specified an argument. What happened to the argument?
319Surely Python raises an exception when a function that requires an argument is
320called without any --- even if the argument isn't actually used...
321
322Actually, you may have guessed the answer: the special thing about methods is
323that the object is passed as the first argument of the function. In our
324example, the call ``x.f()`` is exactly equivalent to ``MyClass.f(x)``. In
325general, calling a method with a list of *n* arguments is equivalent to calling
326the corresponding function with an argument list that is created by inserting
327the method's object before the first argument.
328
329If you still don't understand how methods work, a look at the implementation can
330perhaps clarify matters. When an instance attribute is referenced that isn't a
331data attribute, its class is searched. If the name denotes a valid class
332attribute that is a function object, a method object is created by packing
333(pointers to) the instance object and the function object just found together in
334an abstract object: this is the method object. When the method object is called
Georg Brandla88fd762009-09-01 07:46:26 +0000335with an argument list, a new argument list is constructed from the instance
336object and the argument list, and the function object is called with this new
337argument list.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000338
339
Raymond Hettinger58eb6052014-06-23 18:03:21 -0700340.. _tut-class-and-instance-variables:
341
342Class and Instance Variables
343----------------------------
344
345Generally speaking, instance variables are for data unique to each instance
346and class variables are for attributes and methods shared by all instances
347of the class::
348
349 class Dog:
350
351 kind = 'canine' # class variable shared by all instances
352
353 def __init__(self, name):
354 self.name = name # instance variable unique to each instance
355
356 >>> d = Dog('Fido')
357 >>> e = Dog('Buddy')
358 >>> d.kind # shared by all dogs
359 'canine'
360 >>> e.kind # shared by all dogs
361 'canine'
362 >>> d.name # unique to d
363 'Fido'
364 >>> e.name # unique to e
365 'Buddy'
366
367As discussed in :ref:`tut-object`, shared data can have possibly surprising
368effects with involving :term:`mutable` objects such as lists and dictionaries.
369For example, the *tricks* list in the following code should not be used as a
370class variable because just a single list would be shared by all *Dog*
371instances::
372
373 class Dog:
374
375 tricks = [] # mistaken use of a class variable
376
377 def __init__(self, name):
378 self.name = name
379
380 def add_trick(self, trick):
381 self.tricks.append(trick)
382
383 >>> d = Dog('Fido')
384 >>> e = Dog('Buddy')
385 >>> d.add_trick('roll over')
386 >>> e.add_trick('play dead')
387 >>> d.tricks # unexpectedly shared by all dogs
388 ['roll over', 'play dead']
389
390Correct design of the class should use an instance variable instead::
391
392 class Dog:
393
394 def __init__(self, name):
395 self.name = name
396 self.tricks = [] # creates a new empty list for each dog
397
398 def add_trick(self, trick):
399 self.tricks.append(trick)
400
401 >>> d = Dog('Fido')
402 >>> e = Dog('Buddy')
403 >>> d.add_trick('roll over')
404 >>> e.add_trick('play dead')
405 >>> d.tricks
406 ['roll over']
407 >>> e.tricks
408 ['play dead']
409
410
Georg Brandl8ec7f652007-08-15 14:28:01 +0000411.. _tut-remarks:
412
413Random Remarks
414==============
415
Georg Brandlb19be572007-12-29 10:57:00 +0000416.. These should perhaps be placed more carefully...
Georg Brandl8ec7f652007-08-15 14:28:01 +0000417
418Data attributes override method attributes with the same name; to avoid
419accidental name conflicts, which may cause hard-to-find bugs in large programs,
420it is wise to use some kind of convention that minimizes the chance of
421conflicts. Possible conventions include capitalizing method names, prefixing
422data attribute names with a small unique string (perhaps just an underscore), or
423using verbs for methods and nouns for data attributes.
424
425Data attributes may be referenced by methods as well as by ordinary users
426("clients") of an object. In other words, classes are not usable to implement
427pure abstract data types. In fact, nothing in Python makes it possible to
428enforce data hiding --- it is all based upon convention. (On the other hand,
429the Python implementation, written in C, can completely hide implementation
430details and control access to an object if necessary; this can be used by
431extensions to Python written in C.)
432
433Clients should use data attributes with care --- clients may mess up invariants
434maintained by the methods by stamping on their data attributes. Note that
435clients may add data attributes of their own to an instance object without
436affecting the validity of the methods, as long as name conflicts are avoided ---
437again, a naming convention can save a lot of headaches here.
438
439There is no shorthand for referencing data attributes (or other methods!) from
440within methods. I find that this actually increases the readability of methods:
441there is no chance of confusing local variables and instance variables when
442glancing through a method.
443
444Often, the first argument of a method is called ``self``. This is nothing more
445than a convention: the name ``self`` has absolutely no special meaning to
Georg Brandl4938fef2009-07-29 17:50:25 +0000446Python. Note, however, that by not following the convention your code may be
Georg Brandl8ec7f652007-08-15 14:28:01 +0000447less readable to other Python programmers, and it is also conceivable that a
Georg Brandl4938fef2009-07-29 17:50:25 +0000448*class browser* program might be written that relies upon such a convention.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000449
450Any function object that is a class attribute defines a method for instances of
451that class. It is not necessary that the function definition is textually
452enclosed in the class definition: assigning a function object to a local
453variable in the class is also ok. For example::
454
455 # Function defined outside the class
456 def f1(self, x, y):
457 return min(x, x+y)
458
459 class C:
460 f = f1
461 def g(self):
462 return 'hello world'
463 h = g
464
465Now ``f``, ``g`` and ``h`` are all attributes of class :class:`C` that refer to
466function objects, and consequently they are all methods of instances of
467:class:`C` --- ``h`` being exactly equivalent to ``g``. Note that this practice
468usually only serves to confuse the reader of a program.
469
470Methods may call other methods by using method attributes of the ``self``
471argument::
472
473 class Bag:
474 def __init__(self):
475 self.data = []
476 def add(self, x):
477 self.data.append(x)
478 def addtwice(self, x):
479 self.add(x)
480 self.add(x)
481
482Methods may reference global names in the same way as ordinary functions. The
Terry Jan Reedy477a06c2012-01-11 14:51:07 -0500483global scope associated with a method is the module containing its
484definition. (A class is never used as a global scope.) While one
Georg Brandl8ec7f652007-08-15 14:28:01 +0000485rarely encounters a good reason for using global data in a method, there are
486many legitimate uses of the global scope: for one thing, functions and modules
487imported into the global scope can be used by methods, as well as functions and
488classes defined in it. Usually, the class containing the method is itself
489defined in this global scope, and in the next section we'll find some good
Georg Brandl4938fef2009-07-29 17:50:25 +0000490reasons why a method would want to reference its own class.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000491
Georg Brandl6c45dc12008-03-06 07:31:34 +0000492Each value is an object, and therefore has a *class* (also called its *type*).
493It is stored as ``object.__class__``.
494
Georg Brandl8ec7f652007-08-15 14:28:01 +0000495
496.. _tut-inheritance:
497
498Inheritance
499===========
500
501Of course, a language feature would not be worthy of the name "class" without
502supporting inheritance. The syntax for a derived class definition looks like
503this::
504
505 class DerivedClassName(BaseClassName):
506 <statement-1>
507 .
508 .
509 .
510 <statement-N>
511
512The name :class:`BaseClassName` must be defined in a scope containing the
513derived class definition. In place of a base class name, other arbitrary
514expressions are also allowed. This can be useful, for example, when the base
515class is defined in another module::
516
517 class DerivedClassName(modname.BaseClassName):
518
519Execution of a derived class definition proceeds the same as for a base class.
520When the class object is constructed, the base class is remembered. This is
521used for resolving attribute references: if a requested attribute is not found
522in the class, the search proceeds to look in the base class. This rule is
523applied recursively if the base class itself is derived from some other class.
524
525There's nothing special about instantiation of derived classes:
526``DerivedClassName()`` creates a new instance of the class. Method references
527are resolved as follows: the corresponding class attribute is searched,
528descending down the chain of base classes if necessary, and the method reference
529is valid if this yields a function object.
530
531Derived classes may override methods of their base classes. Because methods
532have no special privileges when calling other methods of the same object, a
533method of a base class that calls another method defined in the same base class
534may end up calling a method of a derived class that overrides it. (For C++
Georg Brandlb19be572007-12-29 10:57:00 +0000535programmers: all methods in Python are effectively ``virtual``.)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000536
537An overriding method in a derived class may in fact want to extend rather than
538simply replace the base class method of the same name. There is a simple way to
539call the base class method directly: just call ``BaseClassName.methodname(self,
540arguments)``. This is occasionally useful to clients as well. (Note that this
Georg Brandl4938fef2009-07-29 17:50:25 +0000541only works if the base class is accessible as ``BaseClassName`` in the global
Georg Brandl8ec7f652007-08-15 14:28:01 +0000542scope.)
543
Mark Dickinson3e4caeb2009-02-21 20:27:01 +0000544Python has two built-in functions that work with inheritance:
Georg Brandl6c45dc12008-03-06 07:31:34 +0000545
Georg Brandl4938fef2009-07-29 17:50:25 +0000546* Use :func:`isinstance` to check an instance's type: ``isinstance(obj, int)``
Georg Brandl6c45dc12008-03-06 07:31:34 +0000547 will be ``True`` only if ``obj.__class__`` is :class:`int` or some class
548 derived from :class:`int`.
549
550* Use :func:`issubclass` to check class inheritance: ``issubclass(bool, int)``
551 is ``True`` since :class:`bool` is a subclass of :class:`int`. However,
552 ``issubclass(unicode, str)`` is ``False`` since :class:`unicode` is not a
553 subclass of :class:`str` (they only share a common ancestor,
554 :class:`basestring`).
Georg Brandlc62ef8b2009-01-03 20:55:06 +0000555
Georg Brandl6c45dc12008-03-06 07:31:34 +0000556
Georg Brandl8ec7f652007-08-15 14:28:01 +0000557
558.. _tut-multiple:
559
560Multiple Inheritance
561--------------------
562
563Python supports a limited form of multiple inheritance as well. A class
564definition with multiple base classes looks like this::
565
566 class DerivedClassName(Base1, Base2, Base3):
567 <statement-1>
568 .
569 .
570 .
571 <statement-N>
572
573For old-style classes, the only rule is depth-first, left-to-right. Thus, if an
574attribute is not found in :class:`DerivedClassName`, it is searched in
575:class:`Base1`, then (recursively) in the base classes of :class:`Base1`, and
576only if it is not found there, it is searched in :class:`Base2`, and so on.
577
578(To some people breadth first --- searching :class:`Base2` and :class:`Base3`
579before the base classes of :class:`Base1` --- looks more natural. However, this
580would require you to know whether a particular attribute of :class:`Base1` is
581actually defined in :class:`Base1` or in one of its base classes before you can
582figure out the consequences of a name conflict with an attribute of
583:class:`Base2`. The depth-first rule makes no differences between direct and
584inherited attributes of :class:`Base1`.)
585
Georg Brandla7395032007-10-21 12:15:05 +0000586For :term:`new-style class`\es, the method resolution order changes dynamically
587to support cooperative calls to :func:`super`. This approach is known in some
Georg Brandl8ec7f652007-08-15 14:28:01 +0000588other multiple-inheritance languages as call-next-method and is more powerful
589than the super call found in single-inheritance languages.
590
591With new-style classes, dynamic ordering is necessary because all cases of
Éric Araujo4fbd88a2011-03-22 21:45:42 +0100592multiple inheritance exhibit one or more diamond relationships (where at
Georg Brandl8ec7f652007-08-15 14:28:01 +0000593least one of the parent classes can be accessed through multiple paths from the
594bottommost class). For example, all new-style classes inherit from
595:class:`object`, so any case of multiple inheritance provides more than one path
596to reach :class:`object`. To keep the base classes from being accessed more
597than once, the dynamic algorithm linearizes the search order in a way that
598preserves the left-to-right ordering specified in each class, that calls each
599parent only once, and that is monotonic (meaning that a class can be subclassed
600without affecting the precedence order of its parents). Taken together, these
601properties make it possible to design reliable and extensible classes with
602multiple inheritance. For more detail, see
Georg Brandl06f3b3b2014-10-29 08:36:35 +0100603https://www.python.org/download/releases/2.3/mro/.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000604
605
606.. _tut-private:
607
Raymond Hettingerce0e0c72012-04-23 21:26:35 -0700608Private Variables and Class-local References
609============================================
Georg Brandl8ec7f652007-08-15 14:28:01 +0000610
Georg Brandl4938fef2009-07-29 17:50:25 +0000611"Private" instance variables that cannot be accessed except from inside an
Georg Brandlb20ada02010-06-12 06:26:54 +0000612object don't exist in Python. However, there is a convention that is followed
Georg Brandl4938fef2009-07-29 17:50:25 +0000613by most Python code: a name prefixed with an underscore (e.g. ``_spam``) should
614be treated as a non-public part of the API (whether it is a function, a method
615or a data member). It should be considered an implementation detail and subject
616to change without notice.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000617
Georg Brandl4938fef2009-07-29 17:50:25 +0000618Since there is a valid use-case for class-private members (namely to avoid name
619clashes of names with names defined by subclasses), there is limited support for
620such a mechanism, called :dfn:`name mangling`. Any identifier of the form
621``__spam`` (at least two leading underscores, at most one trailing underscore)
622is textually replaced with ``_classname__spam``, where ``classname`` is the
623current class name with leading underscore(s) stripped. This mangling is done
Georg Brandlaa66a962009-08-13 12:57:25 +0000624without regard to the syntactic position of the identifier, as long as it
625occurs within the definition of a class.
Georg Brandl4938fef2009-07-29 17:50:25 +0000626
Raymond Hettingerfd1cb5962011-06-25 16:28:07 +0200627Name mangling is helpful for letting subclasses override methods without
628breaking intraclass method calls. For example::
629
Éric Araujo299172b2011-07-26 16:54:24 +0200630 class Mapping:
631 def __init__(self, iterable):
632 self.items_list = []
633 self.__update(iterable)
Raymond Hettingerfd1cb5962011-06-25 16:28:07 +0200634
Éric Araujo299172b2011-07-26 16:54:24 +0200635 def update(self, iterable):
636 for item in iterable:
637 self.items_list.append(item)
Raymond Hettingerfd1cb5962011-06-25 16:28:07 +0200638
Éric Araujo299172b2011-07-26 16:54:24 +0200639 __update = update # private copy of original update() method
Raymond Hettingerfd1cb5962011-06-25 16:28:07 +0200640
Éric Araujo299172b2011-07-26 16:54:24 +0200641 class MappingSubclass(Mapping):
Raymond Hettingerfd1cb5962011-06-25 16:28:07 +0200642
Éric Araujo299172b2011-07-26 16:54:24 +0200643 def update(self, keys, values):
644 # provides new signature for update()
645 # but does not break __init__()
646 for item in zip(keys, values):
647 self.items_list.append(item)
Raymond Hettingerfd1cb5962011-06-25 16:28:07 +0200648
Georg Brandl4938fef2009-07-29 17:50:25 +0000649Note that the mangling rules are designed mostly to avoid accidents; it still is
650possible to access or modify a variable that is considered private. This can
651even be useful in special circumstances, such as in the debugger.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000652
653Notice that code passed to ``exec``, ``eval()`` or ``execfile()`` does not
654consider the classname of the invoking class to be the current class; this is
655similar to the effect of the ``global`` statement, the effect of which is
656likewise restricted to code that is byte-compiled together. The same
657restriction applies to ``getattr()``, ``setattr()`` and ``delattr()``, as well
658as when referencing ``__dict__`` directly.
659
660
661.. _tut-odds:
662
663Odds and Ends
664=============
665
666Sometimes it is useful to have a data type similar to the Pascal "record" or C
667"struct", bundling together a few named data items. An empty class definition
668will do nicely::
669
670 class Employee:
671 pass
672
673 john = Employee() # Create an empty employee record
674
675 # Fill the fields of the record
676 john.name = 'John Doe'
677 john.dept = 'computer lab'
678 john.salary = 1000
679
680A piece of Python code that expects a particular abstract data type can often be
681passed a class that emulates the methods of that data type instead. For
682instance, if you have a function that formats some data from a file object, you
Serhiy Storchaka97278802013-10-09 09:54:32 +0300683can define a class with methods :meth:`read` and :meth:`!readline` that get the
Georg Brandl8ec7f652007-08-15 14:28:01 +0000684data from a string buffer instead, and pass it as an argument.
685
Georg Brandlb19be572007-12-29 10:57:00 +0000686.. (Unfortunately, this technique has its limitations: a class can't define
687 operations that are accessed by special syntax such as sequence subscripting
688 or arithmetic operators, and assigning such a "pseudo-file" to sys.stdin will
689 not cause the interpreter to read further input from it.)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000690
691Instance method objects have attributes, too: ``m.im_self`` is the instance
692object with the method :meth:`m`, and ``m.im_func`` is the function object
693corresponding to the method.
694
695
696.. _tut-exceptionclasses:
697
698Exceptions Are Classes Too
699==========================
700
701User-defined exceptions are identified by classes as well. Using this mechanism
702it is possible to create extensible hierarchies of exceptions.
703
Georg Brandl4938fef2009-07-29 17:50:25 +0000704There are two new valid (semantic) forms for the :keyword:`raise` statement::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000705
706 raise Class, instance
707
708 raise instance
709
710In the first form, ``instance`` must be an instance of :class:`Class` or of a
711class derived from it. The second form is a shorthand for::
712
713 raise instance.__class__, instance
714
Georg Brandl4938fef2009-07-29 17:50:25 +0000715A class in an :keyword:`except` clause is compatible with an exception if it is
716the same class or a base class thereof (but not the other way around --- an
717except clause listing a derived class is not compatible with a base class). For
718example, the following code will print B, C, D in that order::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000719
720 class B:
721 pass
722 class C(B):
723 pass
724 class D(C):
725 pass
726
727 for c in [B, C, D]:
728 try:
729 raise c()
730 except D:
731 print "D"
732 except C:
733 print "C"
734 except B:
735 print "B"
736
737Note that if the except clauses were reversed (with ``except B`` first), it
738would have printed B, B, B --- the first matching except clause is triggered.
739
740When an error message is printed for an unhandled exception, the exception's
741class name is printed, then a colon and a space, and finally the instance
742converted to a string using the built-in function :func:`str`.
743
744
745.. _tut-iterators:
746
747Iterators
748=========
749
750By now you have probably noticed that most container objects can be looped over
751using a :keyword:`for` statement::
752
753 for element in [1, 2, 3]:
754 print element
755 for element in (1, 2, 3):
756 print element
757 for key in {'one':1, 'two':2}:
758 print key
759 for char in "123":
760 print char
761 for line in open("myfile.txt"):
Andrew Svetlovbd5279e2012-12-08 18:01:27 +0200762 print line,
Georg Brandl8ec7f652007-08-15 14:28:01 +0000763
764This style of access is clear, concise, and convenient. The use of iterators
765pervades and unifies Python. Behind the scenes, the :keyword:`for` statement
766calls :func:`iter` on the container object. The function returns an iterator
Serhiy Storchaka97278802013-10-09 09:54:32 +0300767object that defines the method :meth:`~iterator.next` which accesses elements
768in the container one at a time. When there are no more elements,
769:meth:`~iterator.next` raises a :exc:`StopIteration` exception which tells the
770:keyword:`for` loop to terminate.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000771This example shows how it all works::
772
773 >>> s = 'abc'
774 >>> it = iter(s)
775 >>> it
776 <iterator object at 0x00A1DB50>
777 >>> it.next()
778 'a'
779 >>> it.next()
780 'b'
781 >>> it.next()
782 'c'
783 >>> it.next()
Georg Brandl8ec7f652007-08-15 14:28:01 +0000784 Traceback (most recent call last):
785 File "<stdin>", line 1, in ?
786 it.next()
787 StopIteration
788
789Having seen the mechanics behind the iterator protocol, it is easy to add
Georg Brandl2c108402010-08-01 21:28:47 +0000790iterator behavior to your classes. Define an :meth:`__iter__` method which
Serhiy Storchakaea217722014-09-05 23:34:12 +0300791returns an object with a :meth:`~iterator.next` method. If the class
792defines :meth:`~iterator.next`, then :meth:`__iter__` can just return ``self``::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000793
794 class Reverse:
Georg Brandl12b8fcf2011-05-01 22:36:31 +0200795 """Iterator for looping over a sequence backwards."""
Georg Brandl8ec7f652007-08-15 14:28:01 +0000796 def __init__(self, data):
797 self.data = data
798 self.index = len(data)
799 def __iter__(self):
800 return self
801 def next(self):
802 if self.index == 0:
803 raise StopIteration
804 self.index = self.index - 1
805 return self.data[self.index]
806
Georg Brandl12b8fcf2011-05-01 22:36:31 +0200807::
808
Georg Brandl2c108402010-08-01 21:28:47 +0000809 >>> rev = Reverse('spam')
810 >>> iter(rev)
811 <__main__.Reverse object at 0x00A1DB50>
812 >>> for char in rev:
Georg Brandl8ec7f652007-08-15 14:28:01 +0000813 ... print char
814 ...
815 m
816 a
817 p
818 s
819
820
821.. _tut-generators:
822
823Generators
824==========
825
Georg Brandlcf3fb252007-10-21 10:52:38 +0000826:term:`Generator`\s are a simple and powerful tool for creating iterators. They
827are written like regular functions but use the :keyword:`yield` statement
Serhiy Storchakaea217722014-09-05 23:34:12 +0300828whenever they want to return data. Each time :func:`next` is called on it, the
Georg Brandlc182f882014-10-31 09:29:38 +0100829generator resumes where it left off (it remembers all the data values and which
Georg Brandlcf3fb252007-10-21 10:52:38 +0000830statement was last executed). An example shows that generators can be trivially
831easy to create::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000832
833 def reverse(data):
834 for index in range(len(data)-1, -1, -1):
835 yield data[index]
836
Georg Brandl12b8fcf2011-05-01 22:36:31 +0200837::
838
Georg Brandl8ec7f652007-08-15 14:28:01 +0000839 >>> for char in reverse('golf'):
840 ... print char
841 ...
842 f
843 l
844 o
Georg Brandlc62ef8b2009-01-03 20:55:06 +0000845 g
Georg Brandl8ec7f652007-08-15 14:28:01 +0000846
Georg Brandlc182f882014-10-31 09:29:38 +0100847Anything that can be done with generators can also be done with class-based
Georg Brandl8ec7f652007-08-15 14:28:01 +0000848iterators as described in the previous section. What makes generators so
Serhiy Storchakaea217722014-09-05 23:34:12 +0300849compact is that the :meth:`__iter__` and :meth:`~generator.next` methods
850are created automatically.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000851
852Another key feature is that the local variables and execution state are
853automatically saved between calls. This made the function easier to write and
854much more clear than an approach using instance variables like ``self.index``
855and ``self.data``.
856
857In addition to automatic method creation and saving program state, when
858generators terminate, they automatically raise :exc:`StopIteration`. In
859combination, these features make it easy to create iterators with no more effort
860than writing a regular function.
861
862
863.. _tut-genexps:
864
865Generator Expressions
866=====================
867
868Some simple generators can be coded succinctly as expressions using a syntax
869similar to list comprehensions but with parentheses instead of brackets. These
870expressions are designed for situations where the generator is used right away
871by an enclosing function. Generator expressions are more compact but less
872versatile than full generator definitions and tend to be more memory friendly
873than equivalent list comprehensions.
874
875Examples::
876
877 >>> sum(i*i for i in range(10)) # sum of squares
878 285
879
880 >>> xvec = [10, 20, 30]
881 >>> yvec = [7, 5, 3]
882 >>> sum(x*y for x,y in zip(xvec, yvec)) # dot product
883 260
884
885 >>> from math import pi, sin
886 >>> sine_table = dict((x, sin(x*pi/180)) for x in range(0, 91))
887
888 >>> unique_words = set(word for line in page for word in line.split())
889
890 >>> valedictorian = max((student.gpa, student.name) for student in graduates)
891
892 >>> data = 'golf'
893 >>> list(data[i] for i in range(len(data)-1,-1,-1))
894 ['f', 'l', 'o', 'g']
895
896
897
898.. rubric:: Footnotes
899
900.. [#] Except for one thing. Module objects have a secret read-only attribute called
901 :attr:`__dict__` which returns the dictionary used to implement the module's
902 namespace; the name :attr:`__dict__` is an attribute but not a global name.
903 Obviously, using this violates the abstraction of namespace implementation, and
904 should be restricted to things like post-mortem debuggers.
905