blob: 216dcae6b60e4d9eb8e2dda785ae93be32e05873 [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
Serhiy Storchaka12d547a2016-05-10 13:45:32 +0300213
Georg Brandl8ec7f652007-08-15 14:28:01 +0000214 def f(self):
215 return 'hello world'
216
217then ``MyClass.i`` and ``MyClass.f`` are valid attribute references, returning
218an integer and a function object, respectively. Class attributes can also be
219assigned to, so you can change the value of ``MyClass.i`` by assignment.
220:attr:`__doc__` is also a valid attribute, returning the docstring belonging to
221the class: ``"A simple example class"``.
222
223Class *instantiation* uses function notation. Just pretend that the class
224object is a parameterless function that returns a new instance of the class.
225For example (assuming the above class)::
226
227 x = MyClass()
228
229creates a new *instance* of the class and assigns this object to the local
230variable ``x``.
231
232The instantiation operation ("calling" a class object) creates an empty object.
233Many classes like to create objects with instances customized to a specific
234initial state. Therefore a class may define a special method named
235:meth:`__init__`, like this::
236
237 def __init__(self):
238 self.data = []
239
240When a class defines an :meth:`__init__` method, class instantiation
241automatically invokes :meth:`__init__` for the newly-created class instance. So
242in this example, a new, initialized instance can be obtained by::
243
244 x = MyClass()
245
246Of course, the :meth:`__init__` method may have arguments for greater
247flexibility. In that case, arguments given to the class instantiation operator
248are passed on to :meth:`__init__`. For example, ::
249
250 >>> class Complex:
251 ... def __init__(self, realpart, imagpart):
252 ... self.r = realpart
253 ... self.i = imagpart
Georg Brandlc62ef8b2009-01-03 20:55:06 +0000254 ...
Georg Brandl8ec7f652007-08-15 14:28:01 +0000255 >>> x = Complex(3.0, -4.5)
256 >>> x.r, x.i
257 (3.0, -4.5)
258
259
260.. _tut-instanceobjects:
261
262Instance Objects
263----------------
264
265Now what can we do with instance objects? The only operations understood by
266instance objects are attribute references. There are two kinds of valid
267attribute names, data attributes and methods.
268
269*data attributes* correspond to "instance variables" in Smalltalk, and to "data
270members" in C++. Data attributes need not be declared; like local variables,
271they spring into existence when they are first assigned to. For example, if
272``x`` is the instance of :class:`MyClass` created above, the following piece of
273code will print the value ``16``, without leaving a trace::
274
275 x.counter = 1
276 while x.counter < 10:
277 x.counter = x.counter * 2
278 print x.counter
279 del x.counter
280
281The other kind of instance attribute reference is a *method*. A method is a
282function that "belongs to" an object. (In Python, the term method is not unique
283to class instances: other object types can have methods as well. For example,
284list objects have methods called append, insert, remove, sort, and so on.
285However, in the following discussion, we'll use the term method exclusively to
286mean methods of class instance objects, unless explicitly stated otherwise.)
287
288.. index:: object: method
289
290Valid method names of an instance object depend on its class. By definition,
291all attributes of a class that are function objects define corresponding
292methods of its instances. So in our example, ``x.f`` is a valid method
293reference, since ``MyClass.f`` is a function, but ``x.i`` is not, since
294``MyClass.i`` is not. But ``x.f`` is not the same thing as ``MyClass.f`` --- it
295is a *method object*, not a function object.
296
297
298.. _tut-methodobjects:
299
300Method Objects
301--------------
302
303Usually, a method is called right after it is bound::
304
305 x.f()
306
307In the :class:`MyClass` example, this will return the string ``'hello world'``.
308However, it is not necessary to call a method right away: ``x.f`` is a method
309object, and can be stored away and called at a later time. For example::
310
311 xf = x.f
312 while True:
313 print xf()
314
315will continue to print ``hello world`` until the end of time.
316
317What exactly happens when a method is called? You may have noticed that
318``x.f()`` was called without an argument above, even though the function
319definition for :meth:`f` specified an argument. What happened to the argument?
320Surely Python raises an exception when a function that requires an argument is
321called without any --- even if the argument isn't actually used...
322
323Actually, you may have guessed the answer: the special thing about methods is
324that the object is passed as the first argument of the function. In our
325example, the call ``x.f()`` is exactly equivalent to ``MyClass.f(x)``. In
326general, calling a method with a list of *n* arguments is equivalent to calling
327the corresponding function with an argument list that is created by inserting
328the method's object before the first argument.
329
330If you still don't understand how methods work, a look at the implementation can
331perhaps clarify matters. When an instance attribute is referenced that isn't a
332data attribute, its class is searched. If the name denotes a valid class
333attribute that is a function object, a method object is created by packing
334(pointers to) the instance object and the function object just found together in
335an abstract object: this is the method object. When the method object is called
Georg Brandla88fd762009-09-01 07:46:26 +0000336with an argument list, a new argument list is constructed from the instance
337object and the argument list, and the function object is called with this new
338argument list.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000339
340
Raymond Hettinger58eb6052014-06-23 18:03:21 -0700341.. _tut-class-and-instance-variables:
342
343Class and Instance Variables
344----------------------------
345
346Generally speaking, instance variables are for data unique to each instance
347and class variables are for attributes and methods shared by all instances
348of the class::
349
350 class Dog:
351
352 kind = 'canine' # class variable shared by all instances
353
354 def __init__(self, name):
355 self.name = name # instance variable unique to each instance
356
357 >>> d = Dog('Fido')
358 >>> e = Dog('Buddy')
359 >>> d.kind # shared by all dogs
360 'canine'
361 >>> e.kind # shared by all dogs
362 'canine'
363 >>> d.name # unique to d
364 'Fido'
365 >>> e.name # unique to e
366 'Buddy'
367
368As discussed in :ref:`tut-object`, shared data can have possibly surprising
369effects with involving :term:`mutable` objects such as lists and dictionaries.
370For example, the *tricks* list in the following code should not be used as a
371class variable because just a single list would be shared by all *Dog*
372instances::
373
374 class Dog:
375
376 tricks = [] # mistaken use of a class variable
377
378 def __init__(self, name):
379 self.name = name
380
381 def add_trick(self, trick):
382 self.tricks.append(trick)
383
384 >>> d = Dog('Fido')
385 >>> e = Dog('Buddy')
386 >>> d.add_trick('roll over')
387 >>> e.add_trick('play dead')
388 >>> d.tricks # unexpectedly shared by all dogs
389 ['roll over', 'play dead']
390
391Correct design of the class should use an instance variable instead::
392
393 class Dog:
394
395 def __init__(self, name):
396 self.name = name
397 self.tricks = [] # creates a new empty list for each dog
398
399 def add_trick(self, trick):
400 self.tricks.append(trick)
401
402 >>> d = Dog('Fido')
403 >>> e = Dog('Buddy')
404 >>> d.add_trick('roll over')
405 >>> e.add_trick('play dead')
406 >>> d.tricks
407 ['roll over']
408 >>> e.tricks
409 ['play dead']
410
411
Georg Brandl8ec7f652007-08-15 14:28:01 +0000412.. _tut-remarks:
413
414Random Remarks
415==============
416
Georg Brandlb19be572007-12-29 10:57:00 +0000417.. These should perhaps be placed more carefully...
Georg Brandl8ec7f652007-08-15 14:28:01 +0000418
419Data attributes override method attributes with the same name; to avoid
420accidental name conflicts, which may cause hard-to-find bugs in large programs,
421it is wise to use some kind of convention that minimizes the chance of
422conflicts. Possible conventions include capitalizing method names, prefixing
423data attribute names with a small unique string (perhaps just an underscore), or
424using verbs for methods and nouns for data attributes.
425
426Data attributes may be referenced by methods as well as by ordinary users
427("clients") of an object. In other words, classes are not usable to implement
428pure abstract data types. In fact, nothing in Python makes it possible to
429enforce data hiding --- it is all based upon convention. (On the other hand,
430the Python implementation, written in C, can completely hide implementation
431details and control access to an object if necessary; this can be used by
432extensions to Python written in C.)
433
434Clients should use data attributes with care --- clients may mess up invariants
435maintained by the methods by stamping on their data attributes. Note that
436clients may add data attributes of their own to an instance object without
437affecting the validity of the methods, as long as name conflicts are avoided ---
438again, a naming convention can save a lot of headaches here.
439
440There is no shorthand for referencing data attributes (or other methods!) from
441within methods. I find that this actually increases the readability of methods:
442there is no chance of confusing local variables and instance variables when
443glancing through a method.
444
445Often, the first argument of a method is called ``self``. This is nothing more
446than a convention: the name ``self`` has absolutely no special meaning to
Georg Brandl4938fef2009-07-29 17:50:25 +0000447Python. Note, however, that by not following the convention your code may be
Georg Brandl8ec7f652007-08-15 14:28:01 +0000448less readable to other Python programmers, and it is also conceivable that a
Georg Brandl4938fef2009-07-29 17:50:25 +0000449*class browser* program might be written that relies upon such a convention.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000450
451Any function object that is a class attribute defines a method for instances of
452that class. It is not necessary that the function definition is textually
453enclosed in the class definition: assigning a function object to a local
454variable in the class is also ok. For example::
455
456 # Function defined outside the class
457 def f1(self, x, y):
458 return min(x, x+y)
459
460 class C:
461 f = f1
Serhiy Storchaka12d547a2016-05-10 13:45:32 +0300462
Georg Brandl8ec7f652007-08-15 14:28:01 +0000463 def g(self):
464 return 'hello world'
Serhiy Storchaka12d547a2016-05-10 13:45:32 +0300465
Georg Brandl8ec7f652007-08-15 14:28:01 +0000466 h = g
467
468Now ``f``, ``g`` and ``h`` are all attributes of class :class:`C` that refer to
469function objects, and consequently they are all methods of instances of
470:class:`C` --- ``h`` being exactly equivalent to ``g``. Note that this practice
471usually only serves to confuse the reader of a program.
472
473Methods may call other methods by using method attributes of the ``self``
474argument::
475
476 class Bag:
477 def __init__(self):
478 self.data = []
Serhiy Storchaka12d547a2016-05-10 13:45:32 +0300479
Georg Brandl8ec7f652007-08-15 14:28:01 +0000480 def add(self, x):
481 self.data.append(x)
Serhiy Storchaka12d547a2016-05-10 13:45:32 +0300482
Georg Brandl8ec7f652007-08-15 14:28:01 +0000483 def addtwice(self, x):
484 self.add(x)
485 self.add(x)
486
487Methods may reference global names in the same way as ordinary functions. The
Terry Jan Reedy477a06c2012-01-11 14:51:07 -0500488global scope associated with a method is the module containing its
489definition. (A class is never used as a global scope.) While one
Georg Brandl8ec7f652007-08-15 14:28:01 +0000490rarely encounters a good reason for using global data in a method, there are
491many legitimate uses of the global scope: for one thing, functions and modules
492imported into the global scope can be used by methods, as well as functions and
493classes defined in it. Usually, the class containing the method is itself
494defined in this global scope, and in the next section we'll find some good
Georg Brandl4938fef2009-07-29 17:50:25 +0000495reasons why a method would want to reference its own class.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000496
Georg Brandl6c45dc12008-03-06 07:31:34 +0000497Each value is an object, and therefore has a *class* (also called its *type*).
498It is stored as ``object.__class__``.
499
Georg Brandl8ec7f652007-08-15 14:28:01 +0000500
501.. _tut-inheritance:
502
503Inheritance
504===========
505
506Of course, a language feature would not be worthy of the name "class" without
507supporting inheritance. The syntax for a derived class definition looks like
508this::
509
510 class DerivedClassName(BaseClassName):
511 <statement-1>
512 .
513 .
514 .
515 <statement-N>
516
517The name :class:`BaseClassName` must be defined in a scope containing the
518derived class definition. In place of a base class name, other arbitrary
519expressions are also allowed. This can be useful, for example, when the base
520class is defined in another module::
521
522 class DerivedClassName(modname.BaseClassName):
523
524Execution of a derived class definition proceeds the same as for a base class.
525When the class object is constructed, the base class is remembered. This is
526used for resolving attribute references: if a requested attribute is not found
527in the class, the search proceeds to look in the base class. This rule is
528applied recursively if the base class itself is derived from some other class.
529
530There's nothing special about instantiation of derived classes:
531``DerivedClassName()`` creates a new instance of the class. Method references
532are resolved as follows: the corresponding class attribute is searched,
533descending down the chain of base classes if necessary, and the method reference
534is valid if this yields a function object.
535
536Derived classes may override methods of their base classes. Because methods
537have no special privileges when calling other methods of the same object, a
538method of a base class that calls another method defined in the same base class
539may end up calling a method of a derived class that overrides it. (For C++
Georg Brandlb19be572007-12-29 10:57:00 +0000540programmers: all methods in Python are effectively ``virtual``.)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000541
542An overriding method in a derived class may in fact want to extend rather than
543simply replace the base class method of the same name. There is a simple way to
544call the base class method directly: just call ``BaseClassName.methodname(self,
545arguments)``. This is occasionally useful to clients as well. (Note that this
Georg Brandl4938fef2009-07-29 17:50:25 +0000546only works if the base class is accessible as ``BaseClassName`` in the global
Georg Brandl8ec7f652007-08-15 14:28:01 +0000547scope.)
548
Mark Dickinson3e4caeb2009-02-21 20:27:01 +0000549Python has two built-in functions that work with inheritance:
Georg Brandl6c45dc12008-03-06 07:31:34 +0000550
Georg Brandl4938fef2009-07-29 17:50:25 +0000551* Use :func:`isinstance` to check an instance's type: ``isinstance(obj, int)``
Georg Brandl6c45dc12008-03-06 07:31:34 +0000552 will be ``True`` only if ``obj.__class__`` is :class:`int` or some class
553 derived from :class:`int`.
554
555* Use :func:`issubclass` to check class inheritance: ``issubclass(bool, int)``
556 is ``True`` since :class:`bool` is a subclass of :class:`int`. However,
557 ``issubclass(unicode, str)`` is ``False`` since :class:`unicode` is not a
558 subclass of :class:`str` (they only share a common ancestor,
559 :class:`basestring`).
Georg Brandlc62ef8b2009-01-03 20:55:06 +0000560
Georg Brandl6c45dc12008-03-06 07:31:34 +0000561
Georg Brandl8ec7f652007-08-15 14:28:01 +0000562
563.. _tut-multiple:
564
565Multiple Inheritance
566--------------------
567
568Python supports a limited form of multiple inheritance as well. A class
569definition with multiple base classes looks like this::
570
571 class DerivedClassName(Base1, Base2, Base3):
572 <statement-1>
573 .
574 .
575 .
576 <statement-N>
577
578For old-style classes, the only rule is depth-first, left-to-right. Thus, if an
579attribute is not found in :class:`DerivedClassName`, it is searched in
580:class:`Base1`, then (recursively) in the base classes of :class:`Base1`, and
581only if it is not found there, it is searched in :class:`Base2`, and so on.
582
583(To some people breadth first --- searching :class:`Base2` and :class:`Base3`
584before the base classes of :class:`Base1` --- looks more natural. However, this
585would require you to know whether a particular attribute of :class:`Base1` is
586actually defined in :class:`Base1` or in one of its base classes before you can
587figure out the consequences of a name conflict with an attribute of
588:class:`Base2`. The depth-first rule makes no differences between direct and
589inherited attributes of :class:`Base1`.)
590
Georg Brandla7395032007-10-21 12:15:05 +0000591For :term:`new-style class`\es, the method resolution order changes dynamically
592to support cooperative calls to :func:`super`. This approach is known in some
Georg Brandl8ec7f652007-08-15 14:28:01 +0000593other multiple-inheritance languages as call-next-method and is more powerful
594than the super call found in single-inheritance languages.
595
596With new-style classes, dynamic ordering is necessary because all cases of
Éric Araujo4fbd88a2011-03-22 21:45:42 +0100597multiple inheritance exhibit one or more diamond relationships (where at
Georg Brandl8ec7f652007-08-15 14:28:01 +0000598least one of the parent classes can be accessed through multiple paths from the
599bottommost class). For example, all new-style classes inherit from
600:class:`object`, so any case of multiple inheritance provides more than one path
601to reach :class:`object`. To keep the base classes from being accessed more
602than once, the dynamic algorithm linearizes the search order in a way that
603preserves the left-to-right ordering specified in each class, that calls each
604parent only once, and that is monotonic (meaning that a class can be subclassed
605without affecting the precedence order of its parents). Taken together, these
606properties make it possible to design reliable and extensible classes with
607multiple inheritance. For more detail, see
Georg Brandl06f3b3b2014-10-29 08:36:35 +0100608https://www.python.org/download/releases/2.3/mro/.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000609
610
611.. _tut-private:
612
Raymond Hettingerce0e0c72012-04-23 21:26:35 -0700613Private Variables and Class-local References
614============================================
Georg Brandl8ec7f652007-08-15 14:28:01 +0000615
Georg Brandl4938fef2009-07-29 17:50:25 +0000616"Private" instance variables that cannot be accessed except from inside an
Georg Brandlb20ada02010-06-12 06:26:54 +0000617object don't exist in Python. However, there is a convention that is followed
Georg Brandl4938fef2009-07-29 17:50:25 +0000618by most Python code: a name prefixed with an underscore (e.g. ``_spam``) should
619be treated as a non-public part of the API (whether it is a function, a method
620or a data member). It should be considered an implementation detail and subject
621to change without notice.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000622
Georg Brandl4938fef2009-07-29 17:50:25 +0000623Since there is a valid use-case for class-private members (namely to avoid name
624clashes of names with names defined by subclasses), there is limited support for
625such a mechanism, called :dfn:`name mangling`. Any identifier of the form
626``__spam`` (at least two leading underscores, at most one trailing underscore)
627is textually replaced with ``_classname__spam``, where ``classname`` is the
628current class name with leading underscore(s) stripped. This mangling is done
Georg Brandlaa66a962009-08-13 12:57:25 +0000629without regard to the syntactic position of the identifier, as long as it
630occurs within the definition of a class.
Georg Brandl4938fef2009-07-29 17:50:25 +0000631
Raymond Hettingerfd1cb5962011-06-25 16:28:07 +0200632Name mangling is helpful for letting subclasses override methods without
633breaking intraclass method calls. For example::
634
Éric Araujo299172b2011-07-26 16:54:24 +0200635 class Mapping:
636 def __init__(self, iterable):
637 self.items_list = []
638 self.__update(iterable)
Raymond Hettingerfd1cb5962011-06-25 16:28:07 +0200639
Éric Araujo299172b2011-07-26 16:54:24 +0200640 def update(self, iterable):
641 for item in iterable:
642 self.items_list.append(item)
Raymond Hettingerfd1cb5962011-06-25 16:28:07 +0200643
Éric Araujo299172b2011-07-26 16:54:24 +0200644 __update = update # private copy of original update() method
Raymond Hettingerfd1cb5962011-06-25 16:28:07 +0200645
Éric Araujo299172b2011-07-26 16:54:24 +0200646 class MappingSubclass(Mapping):
Raymond Hettingerfd1cb5962011-06-25 16:28:07 +0200647
Éric Araujo299172b2011-07-26 16:54:24 +0200648 def update(self, keys, values):
649 # provides new signature for update()
650 # but does not break __init__()
651 for item in zip(keys, values):
652 self.items_list.append(item)
Raymond Hettingerfd1cb5962011-06-25 16:28:07 +0200653
Georg Brandl4938fef2009-07-29 17:50:25 +0000654Note that the mangling rules are designed mostly to avoid accidents; it still is
655possible to access or modify a variable that is considered private. This can
656even be useful in special circumstances, such as in the debugger.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000657
658Notice that code passed to ``exec``, ``eval()`` or ``execfile()`` does not
659consider the classname of the invoking class to be the current class; this is
660similar to the effect of the ``global`` statement, the effect of which is
661likewise restricted to code that is byte-compiled together. The same
662restriction applies to ``getattr()``, ``setattr()`` and ``delattr()``, as well
663as when referencing ``__dict__`` directly.
664
665
666.. _tut-odds:
667
668Odds and Ends
669=============
670
671Sometimes it is useful to have a data type similar to the Pascal "record" or C
672"struct", bundling together a few named data items. An empty class definition
673will do nicely::
674
675 class Employee:
676 pass
677
Serhiy Storchaka12d547a2016-05-10 13:45:32 +0300678 john = Employee() # Create an empty employee record
Georg Brandl8ec7f652007-08-15 14:28:01 +0000679
680 # Fill the fields of the record
681 john.name = 'John Doe'
682 john.dept = 'computer lab'
683 john.salary = 1000
684
685A piece of Python code that expects a particular abstract data type can often be
686passed a class that emulates the methods of that data type instead. For
687instance, if you have a function that formats some data from a file object, you
Serhiy Storchaka97278802013-10-09 09:54:32 +0300688can define a class with methods :meth:`read` and :meth:`!readline` that get the
Georg Brandl8ec7f652007-08-15 14:28:01 +0000689data from a string buffer instead, and pass it as an argument.
690
Georg Brandlb19be572007-12-29 10:57:00 +0000691.. (Unfortunately, this technique has its limitations: a class can't define
692 operations that are accessed by special syntax such as sequence subscripting
693 or arithmetic operators, and assigning such a "pseudo-file" to sys.stdin will
694 not cause the interpreter to read further input from it.)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000695
696Instance method objects have attributes, too: ``m.im_self`` is the instance
697object with the method :meth:`m`, and ``m.im_func`` is the function object
698corresponding to the method.
699
700
701.. _tut-exceptionclasses:
702
703Exceptions Are Classes Too
704==========================
705
706User-defined exceptions are identified by classes as well. Using this mechanism
707it is possible to create extensible hierarchies of exceptions.
708
Georg Brandl4938fef2009-07-29 17:50:25 +0000709There are two new valid (semantic) forms for the :keyword:`raise` statement::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000710
711 raise Class, instance
712
713 raise instance
714
715In the first form, ``instance`` must be an instance of :class:`Class` or of a
716class derived from it. The second form is a shorthand for::
717
718 raise instance.__class__, instance
719
Georg Brandl4938fef2009-07-29 17:50:25 +0000720A class in an :keyword:`except` clause is compatible with an exception if it is
721the same class or a base class thereof (but not the other way around --- an
722except clause listing a derived class is not compatible with a base class). For
723example, the following code will print B, C, D in that order::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000724
725 class B:
726 pass
727 class C(B):
728 pass
729 class D(C):
730 pass
731
732 for c in [B, C, D]:
733 try:
734 raise c()
735 except D:
736 print "D"
737 except C:
738 print "C"
739 except B:
740 print "B"
741
742Note that if the except clauses were reversed (with ``except B`` first), it
743would have printed B, B, B --- the first matching except clause is triggered.
744
745When an error message is printed for an unhandled exception, the exception's
746class name is printed, then a colon and a space, and finally the instance
747converted to a string using the built-in function :func:`str`.
748
749
750.. _tut-iterators:
751
752Iterators
753=========
754
755By now you have probably noticed that most container objects can be looped over
756using a :keyword:`for` statement::
757
758 for element in [1, 2, 3]:
759 print element
760 for element in (1, 2, 3):
761 print element
762 for key in {'one':1, 'two':2}:
763 print key
764 for char in "123":
765 print char
766 for line in open("myfile.txt"):
Andrew Svetlovbd5279e2012-12-08 18:01:27 +0200767 print line,
Georg Brandl8ec7f652007-08-15 14:28:01 +0000768
769This style of access is clear, concise, and convenient. The use of iterators
770pervades and unifies Python. Behind the scenes, the :keyword:`for` statement
771calls :func:`iter` on the container object. The function returns an iterator
Serhiy Storchaka97278802013-10-09 09:54:32 +0300772object that defines the method :meth:`~iterator.next` which accesses elements
773in the container one at a time. When there are no more elements,
774:meth:`~iterator.next` raises a :exc:`StopIteration` exception which tells the
775:keyword:`for` loop to terminate.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000776This example shows how it all works::
777
778 >>> s = 'abc'
779 >>> it = iter(s)
780 >>> it
781 <iterator object at 0x00A1DB50>
782 >>> it.next()
783 'a'
784 >>> it.next()
785 'b'
786 >>> it.next()
787 'c'
788 >>> it.next()
Georg Brandl8ec7f652007-08-15 14:28:01 +0000789 Traceback (most recent call last):
Mariattae1b02ff2017-05-03 18:54:28 -0700790 File "<stdin>", line 1, in <module>
Georg Brandl8ec7f652007-08-15 14:28:01 +0000791 it.next()
792 StopIteration
793
794Having seen the mechanics behind the iterator protocol, it is easy to add
Georg Brandl2c108402010-08-01 21:28:47 +0000795iterator behavior to your classes. Define an :meth:`__iter__` method which
Serhiy Storchakaea217722014-09-05 23:34:12 +0300796returns an object with a :meth:`~iterator.next` method. If the class
797defines :meth:`~iterator.next`, then :meth:`__iter__` can just return ``self``::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000798
799 class Reverse:
Georg Brandl12b8fcf2011-05-01 22:36:31 +0200800 """Iterator for looping over a sequence backwards."""
Georg Brandl8ec7f652007-08-15 14:28:01 +0000801 def __init__(self, data):
802 self.data = data
803 self.index = len(data)
Serhiy Storchaka12d547a2016-05-10 13:45:32 +0300804
Georg Brandl8ec7f652007-08-15 14:28:01 +0000805 def __iter__(self):
806 return self
Serhiy Storchaka12d547a2016-05-10 13:45:32 +0300807
Georg Brandl8ec7f652007-08-15 14:28:01 +0000808 def next(self):
809 if self.index == 0:
810 raise StopIteration
811 self.index = self.index - 1
812 return self.data[self.index]
813
Georg Brandl12b8fcf2011-05-01 22:36:31 +0200814::
815
Georg Brandl2c108402010-08-01 21:28:47 +0000816 >>> rev = Reverse('spam')
817 >>> iter(rev)
818 <__main__.Reverse object at 0x00A1DB50>
819 >>> for char in rev:
Georg Brandl8ec7f652007-08-15 14:28:01 +0000820 ... print char
821 ...
822 m
823 a
824 p
825 s
826
827
828.. _tut-generators:
829
830Generators
831==========
832
Georg Brandlcf3fb252007-10-21 10:52:38 +0000833:term:`Generator`\s are a simple and powerful tool for creating iterators. They
834are written like regular functions but use the :keyword:`yield` statement
Serhiy Storchakaea217722014-09-05 23:34:12 +0300835whenever they want to return data. Each time :func:`next` is called on it, the
Georg Brandlc182f882014-10-31 09:29:38 +0100836generator resumes where it left off (it remembers all the data values and which
Georg Brandlcf3fb252007-10-21 10:52:38 +0000837statement was last executed). An example shows that generators can be trivially
838easy to create::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000839
840 def reverse(data):
841 for index in range(len(data)-1, -1, -1):
842 yield data[index]
843
Georg Brandl12b8fcf2011-05-01 22:36:31 +0200844::
845
Georg Brandl8ec7f652007-08-15 14:28:01 +0000846 >>> for char in reverse('golf'):
847 ... print char
848 ...
849 f
850 l
851 o
Georg Brandlc62ef8b2009-01-03 20:55:06 +0000852 g
Georg Brandl8ec7f652007-08-15 14:28:01 +0000853
Georg Brandlc182f882014-10-31 09:29:38 +0100854Anything that can be done with generators can also be done with class-based
Georg Brandl8ec7f652007-08-15 14:28:01 +0000855iterators as described in the previous section. What makes generators so
Serhiy Storchakaea217722014-09-05 23:34:12 +0300856compact is that the :meth:`__iter__` and :meth:`~generator.next` methods
857are created automatically.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000858
859Another key feature is that the local variables and execution state are
860automatically saved between calls. This made the function easier to write and
861much more clear than an approach using instance variables like ``self.index``
862and ``self.data``.
863
864In addition to automatic method creation and saving program state, when
865generators terminate, they automatically raise :exc:`StopIteration`. In
866combination, these features make it easy to create iterators with no more effort
867than writing a regular function.
868
869
870.. _tut-genexps:
871
872Generator Expressions
873=====================
874
875Some simple generators can be coded succinctly as expressions using a syntax
876similar to list comprehensions but with parentheses instead of brackets. These
877expressions are designed for situations where the generator is used right away
878by an enclosing function. Generator expressions are more compact but less
879versatile than full generator definitions and tend to be more memory friendly
880than equivalent list comprehensions.
881
882Examples::
883
884 >>> sum(i*i for i in range(10)) # sum of squares
885 285
886
887 >>> xvec = [10, 20, 30]
888 >>> yvec = [7, 5, 3]
889 >>> sum(x*y for x,y in zip(xvec, yvec)) # dot product
890 260
891
892 >>> from math import pi, sin
893 >>> sine_table = dict((x, sin(x*pi/180)) for x in range(0, 91))
894
895 >>> unique_words = set(word for line in page for word in line.split())
896
897 >>> valedictorian = max((student.gpa, student.name) for student in graduates)
898
899 >>> data = 'golf'
900 >>> list(data[i] for i in range(len(data)-1,-1,-1))
901 ['f', 'l', 'o', 'g']
902
903
904
905.. rubric:: Footnotes
906
907.. [#] Except for one thing. Module objects have a secret read-only attribute called
Martin Panterd51b0f22016-06-18 03:57:31 +0000908 :attr:`~object.__dict__` which returns the dictionary used to implement the module's
909 namespace; the name :attr:`~object.__dict__` is an attribute but not a global name.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000910 Obviously, using this violates the abstraction of namespace implementation, and
911 should be restricted to things like post-mortem debuggers.
912