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