1 .. _tut-classes: 2 3 ******* 4 Classes 5 ******* 6 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 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 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. 16 17 In 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 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. 27 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 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 33 34 .. _tut-object: 35 36 A Word About Names and Objects 37 ============================== 38 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, 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. 50 51 52 .. _tut-scopes: 53 54 Python Scopes and Namespaces 55 ============================ 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 68 namespaces are: the set of built-in names (containing functions such as :func:`abs`, and 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 73 different modules may both define a function ``maximize`` without confusion --- 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 90 Namespaces are created at different moments and have different lifetimes. The 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 98 called :mod:`__builtin__`.) 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 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 119 120 If a name is declared global, then all references and assignments go directly to 121 the middle scope containing the module's global names. Otherwise, all variables 122 found outside of the innermost scope are read-only (an attempt to write to such 123 a variable will simply create a *new* local variable in the innermost scope, 124 leaving the identically named outer variable unchanged). 125 126 Usually, the local scope references the local names of the (textually) current 127 function. Outside functions, the local scope references the same namespace as 128 the global scope: the module's namespace. Class definitions place yet another 129 namespace in the local scope. 130 131 It is important to realize that scopes are determined textually: the global 132 scope of a function defined in a module is that module's namespace, no matter 133 from where or by what alias the function is called. On the other hand, the 134 actual search for names is done dynamically, at run time --- however, the 135 language definition is evolving towards static name resolution, at "compile" 136 time, so don't rely on dynamic name resolution! (In fact, local variables are 137 already determined statically.) 138 139 A special quirk of Python is that -- if no :keyword:`global` statement is in 140 effect -- assignments to names always go into the innermost scope. Assignments 141 do not copy data --- they just bind names to objects. The same is true for 142 deletions: the statement ``del x`` removes the binding of ``x`` from the 143 namespace referenced by the local scope. In fact, all operations that introduce 144 new names use the local scope: in particular, :keyword:`import` statements and 145 function definitions bind the module or function name in the local scope. (The 146 :keyword:`global` statement can be used to indicate that particular variables 147 live in the global scope.) 148 149 150 .. _tut-firstclasses: 151 152 A First Look at Classes 153 ======================= 154 155 Classes introduce a little bit of new syntax, three new object types, and some 156 new semantics. 157 158 159 .. _tut-classdefinition: 160 161 Class Definition Syntax 162 ----------------------- 163 164 The simplest form of class definition looks like this:: 165 166 class ClassName: 167 <statement-1> 168 . 169 . 170 . 171 <statement-N> 172 173 Class definitions, like function definitions (:keyword:`def` statements) must be 174 executed before they have any effect. (You could conceivably place a class 175 definition in a branch of an :keyword:`if` statement, or inside a function.) 176 177 In practice, the statements inside a class definition will usually be function 178 definitions, but other statements are allowed, and sometimes useful --- we'll 179 come back to this later. The function definitions inside a class normally have 180 a peculiar form of argument list, dictated by the calling conventions for 181 methods --- again, this is explained later. 182 183 When a class definition is entered, a new namespace is created, and used as the 184 local scope --- thus, all assignments to local variables go into this new 185 namespace. In particular, function definitions bind the name of the new 186 function here. 187 188 When a class definition is left normally (via the end), a *class object* is 189 created. This is basically a wrapper around the contents of the namespace 190 created by the class definition; we'll learn more about class objects in the 191 next section. The original local scope (the one in effect just before the class 192 definition was entered) is reinstated, and the class object is bound here to the 193 class name given in the class definition header (:class:`ClassName` in the 194 example). 195 196 197 .. _tut-classobjects: 198 199 Class Objects 200 ------------- 201 202 Class objects support two kinds of operations: attribute references and 203 instantiation. 204 205 *Attribute references* use the standard syntax used for all attribute references 206 in Python: ``obj.name``. Valid attribute names are all the names that were in 207 the class's namespace when the class object was created. So, if the class 208 definition looked like this:: 209 210 class MyClass: 211 """A simple example class""" 212 i = 12345 213 214 def f(self): 215 return 'hello world' 216 217 then ``MyClass.i`` and ``MyClass.f`` are valid attribute references, returning 218 an integer and a function object, respectively. Class attributes can also be 219 assigned 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 221 the class: ``"A simple example class"``. 222 223 Class *instantiation* uses function notation. Just pretend that the class 224 object is a parameterless function that returns a new instance of the class. 225 For example (assuming the above class):: 226 227 x = MyClass() 228 229 creates a new *instance* of the class and assigns this object to the local 230 variable ``x``. 231 232 The instantiation operation ("calling" a class object) creates an empty object. 233 Many classes like to create objects with instances customized to a specific 234 initial state. Therefore a class may define a special method named 235 :meth:`__init__`, like this:: 236 237 def __init__(self): 238 self.data = [] 239 240 When a class defines an :meth:`__init__` method, class instantiation 241 automatically invokes :meth:`__init__` for the newly-created class instance. So 242 in this example, a new, initialized instance can be obtained by:: 243 244 x = MyClass() 245 246 Of course, the :meth:`__init__` method may have arguments for greater 247 flexibility. In that case, arguments given to the class instantiation operator 248 are 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 254 ... 255 >>> x = Complex(3.0, -4.5) 256 >>> x.r, x.i 257 (3.0, -4.5) 258 259 260 .. _tut-instanceobjects: 261 262 Instance Objects 263 ---------------- 264 265 Now what can we do with instance objects? The only operations understood by 266 instance objects are attribute references. There are two kinds of valid 267 attribute names, data attributes and methods. 268 269 *data attributes* correspond to "instance variables" in Smalltalk, and to "data 270 members" in C++. Data attributes need not be declared; like local variables, 271 they 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 273 code 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 281 The other kind of instance attribute reference is a *method*. A method is a 282 function that "belongs to" an object. (In Python, the term method is not unique 283 to class instances: other object types can have methods as well. For example, 284 list objects have methods called append, insert, remove, sort, and so on. 285 However, in the following discussion, we'll use the term method exclusively to 286 mean methods of class instance objects, unless explicitly stated otherwise.) 287 288 .. index:: object: method 289 290 Valid method names of an instance object depend on its class. By definition, 291 all attributes of a class that are function objects define corresponding 292 methods of its instances. So in our example, ``x.f`` is a valid method 293 reference, 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 295 is a *method object*, not a function object. 296 297 298 .. _tut-methodobjects: 299 300 Method Objects 301 -------------- 302 303 Usually, a method is called right after it is bound:: 304 305 x.f() 306 307 In the :class:`MyClass` example, this will return the string ``'hello world'``. 308 However, it is not necessary to call a method right away: ``x.f`` is a method 309 object, 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 315 will continue to print ``hello world`` until the end of time. 316 317 What 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 319 definition for :meth:`f` specified an argument. What happened to the argument? 320 Surely Python raises an exception when a function that requires an argument is 321 called without any --- even if the argument isn't actually used... 322 323 Actually, you may have guessed the answer: the special thing about methods is 324 that the object is passed as the first argument of the function. In our 325 example, the call ``x.f()`` is exactly equivalent to ``MyClass.f(x)``. In 326 general, calling a method with a list of *n* arguments is equivalent to calling 327 the corresponding function with an argument list that is created by inserting 328 the method's object before the first argument. 329 330 If you still don't understand how methods work, a look at the implementation can 331 perhaps clarify matters. When a non-data attribute of an instance is 332 referenced, the instance's class is searched. If the name denotes a valid class 333 attribute 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 335 an abstract object: this is the method object. When the method object is called 336 with an argument list, a new argument list is constructed from the instance 337 object and the argument list, and the function object is called with this new 338 argument list. 339 340 341 .. _tut-class-and-instance-variables: 342 343 Class and Instance Variables 344 ---------------------------- 345 346 Generally speaking, instance variables are for data unique to each instance 347 and class variables are for attributes and methods shared by all instances 348 of 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 368 As discussed in :ref:`tut-object`, shared data can have possibly surprising 369 effects with involving :term:`mutable` objects such as lists and dictionaries. 370 For example, the *tricks* list in the following code should not be used as a 371 class variable because just a single list would be shared by all *Dog* 372 instances:: 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 391 Correct 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 412 .. _tut-remarks: 413 414 Random Remarks 415 ============== 416 417 .. These should perhaps be placed more carefully... 418 419 Data attributes override method attributes with the same name; to avoid 420 accidental name conflicts, which may cause hard-to-find bugs in large programs, 421 it is wise to use some kind of convention that minimizes the chance of 422 conflicts. Possible conventions include capitalizing method names, prefixing 423 data attribute names with a small unique string (perhaps just an underscore), or 424 using verbs for methods and nouns for data attributes. 425 426 Data 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 428 pure abstract data types. In fact, nothing in Python makes it possible to 429 enforce data hiding --- it is all based upon convention. (On the other hand, 430 the Python implementation, written in C, can completely hide implementation 431 details and control access to an object if necessary; this can be used by 432 extensions to Python written in C.) 433 434 Clients should use data attributes with care --- clients may mess up invariants 435 maintained by the methods by stamping on their data attributes. Note that 436 clients may add data attributes of their own to an instance object without 437 affecting the validity of the methods, as long as name conflicts are avoided --- 438 again, a naming convention can save a lot of headaches here. 439 440 There is no shorthand for referencing data attributes (or other methods!) from 441 within methods. I find that this actually increases the readability of methods: 442 there is no chance of confusing local variables and instance variables when 443 glancing through a method. 444 445 Often, the first argument of a method is called ``self``. This is nothing more 446 than a convention: the name ``self`` has absolutely no special meaning to 447 Python. Note, however, that by not following the convention your code may be 448 less readable to other Python programmers, and it is also conceivable that a 449 *class browser* program might be written that relies upon such a convention. 450 451 Any function object that is a class attribute defines a method for instances of 452 that class. It is not necessary that the function definition is textually 453 enclosed in the class definition: assigning a function object to a local 454 variable 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 462 463 def g(self): 464 return 'hello world' 465 466 h = g 467 468 Now ``f``, ``g`` and ``h`` are all attributes of class :class:`C` that refer to 469 function objects, and consequently they are all methods of instances of 470 :class:`C` --- ``h`` being exactly equivalent to ``g``. Note that this practice 471 usually only serves to confuse the reader of a program. 472 473 Methods may call other methods by using method attributes of the ``self`` 474 argument:: 475 476 class Bag: 477 def __init__(self): 478 self.data = [] 479 480 def add(self, x): 481 self.data.append(x) 482 483 def addtwice(self, x): 484 self.add(x) 485 self.add(x) 486 487 Methods may reference global names in the same way as ordinary functions. The 488 global scope associated with a method is the module containing its 489 definition. (A class is never used as a global scope.) While one 490 rarely encounters a good reason for using global data in a method, there are 491 many legitimate uses of the global scope: for one thing, functions and modules 492 imported into the global scope can be used by methods, as well as functions and 493 classes defined in it. Usually, the class containing the method is itself 494 defined in this global scope, and in the next section we'll find some good 495 reasons why a method would want to reference its own class. 496 497 Each value is an object, and therefore has a *class* (also called its *type*). 498 It is stored as ``object.__class__``. 499 500 501 .. _tut-inheritance: 502 503 Inheritance 504 =========== 505 506 Of course, a language feature would not be worthy of the name "class" without 507 supporting inheritance. The syntax for a derived class definition looks like 508 this:: 509 510 class DerivedClassName(BaseClassName): 511 <statement-1> 512 . 513 . 514 . 515 <statement-N> 516 517 The name :class:`BaseClassName` must be defined in a scope containing the 518 derived class definition. In place of a base class name, other arbitrary 519 expressions are also allowed. This can be useful, for example, when the base 520 class is defined in another module:: 521 522 class DerivedClassName(modname.BaseClassName): 523 524 Execution of a derived class definition proceeds the same as for a base class. 525 When the class object is constructed, the base class is remembered. This is 526 used for resolving attribute references: if a requested attribute is not found 527 in the class, the search proceeds to look in the base class. This rule is 528 applied recursively if the base class itself is derived from some other class. 529 530 There's nothing special about instantiation of derived classes: 531 ``DerivedClassName()`` creates a new instance of the class. Method references 532 are resolved as follows: the corresponding class attribute is searched, 533 descending down the chain of base classes if necessary, and the method reference 534 is valid if this yields a function object. 535 536 Derived classes may override methods of their base classes. Because methods 537 have no special privileges when calling other methods of the same object, a 538 method of a base class that calls another method defined in the same base class 539 may end up calling a method of a derived class that overrides it. (For C++ 540 programmers: all methods in Python are effectively ``virtual``.) 541 542 An overriding method in a derived class may in fact want to extend rather than 543 simply replace the base class method of the same name. There is a simple way to 544 call the base class method directly: just call ``BaseClassName.methodname(self, 545 arguments)``. This is occasionally useful to clients as well. (Note that this 546 only works if the base class is accessible as ``BaseClassName`` in the global 547 scope.) 548 549 Python has two built-in functions that work with inheritance: 550 551 * Use :func:`isinstance` to check an instance's type: ``isinstance(obj, int)`` 552 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`). 560 561 562 563 .. _tut-multiple: 564 565 Multiple Inheritance 566 -------------------- 567 568 Python supports a limited form of multiple inheritance as well. A class 569 definition with multiple base classes looks like this:: 570 571 class DerivedClassName(Base1, Base2, Base3): 572 <statement-1> 573 . 574 . 575 . 576 <statement-N> 577 578 For old-style classes, the only rule is depth-first, left-to-right. Thus, if an 579 attribute is not found in :class:`DerivedClassName`, it is searched in 580 :class:`Base1`, then (recursively) in the base classes of :class:`Base1`, and 581 only 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` 584 before the base classes of :class:`Base1` --- looks more natural. However, this 585 would require you to know whether a particular attribute of :class:`Base1` is 586 actually defined in :class:`Base1` or in one of its base classes before you can 587 figure out the consequences of a name conflict with an attribute of 588 :class:`Base2`. The depth-first rule makes no differences between direct and 589 inherited attributes of :class:`Base1`.) 590 591 For :term:`new-style class`\es, the method resolution order changes dynamically 592 to support cooperative calls to :func:`super`. This approach is known in some 593 other multiple-inheritance languages as call-next-method and is more powerful 594 than the super call found in single-inheritance languages. 595 596 With new-style classes, dynamic ordering is necessary because all cases of 597 multiple inheritance exhibit one or more diamond relationships (where at 598 least one of the parent classes can be accessed through multiple paths from the 599 bottommost class). For example, all new-style classes inherit from 600 :class:`object`, so any case of multiple inheritance provides more than one path 601 to reach :class:`object`. To keep the base classes from being accessed more 602 than once, the dynamic algorithm linearizes the search order in a way that 603 preserves the left-to-right ordering specified in each class, that calls each 604 parent only once, and that is monotonic (meaning that a class can be subclassed 605 without affecting the precedence order of its parents). Taken together, these 606 properties make it possible to design reliable and extensible classes with 607 multiple inheritance. For more detail, see 608 https://www.python.org/download/releases/2.3/mro/. 609 610 611 .. _tut-private: 612 613 Private Variables and Class-local References 614 ============================================ 615 616 "Private" instance variables that cannot be accessed except from inside an 617 object don't exist in Python. However, there is a convention that is followed 618 by most Python code: a name prefixed with an underscore (e.g. ``_spam``) should 619 be treated as a non-public part of the API (whether it is a function, a method 620 or a data member). It should be considered an implementation detail and subject 621 to change without notice. 622 623 Since there is a valid use-case for class-private members (namely to avoid name 624 clashes of names with names defined by subclasses), there is limited support for 625 such a mechanism, called :dfn:`name mangling`. Any identifier of the form 626 ``__spam`` (at least two leading underscores, at most one trailing underscore) 627 is textually replaced with ``_classname__spam``, where ``classname`` is the 628 current class name with leading underscore(s) stripped. This mangling is done 629 without regard to the syntactic position of the identifier, as long as it 630 occurs within the definition of a class. 631 632 Name mangling is helpful for letting subclasses override methods without 633 breaking intraclass method calls. For example:: 634 635 class Mapping: 636 def __init__(self, iterable): 637 self.items_list = [] 638 self.__update(iterable) 639 640 def update(self, iterable): 641 for item in iterable: 642 self.items_list.append(item) 643 644 __update = update # private copy of original update() method 645 646 class MappingSubclass(Mapping): 647 648 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) 653 654 Note that the mangling rules are designed mostly to avoid accidents; it still is 655 possible to access or modify a variable that is considered private. This can 656 even be useful in special circumstances, such as in the debugger. 657 658 Notice that code passed to ``exec``, ``eval()`` or ``execfile()`` does not 659 consider the classname of the invoking class to be the current class; this is 660 similar to the effect of the ``global`` statement, the effect of which is 661 likewise restricted to code that is byte-compiled together. The same 662 restriction applies to ``getattr()``, ``setattr()`` and ``delattr()``, as well 663 as when referencing ``__dict__`` directly. 664 665 666 .. _tut-odds: 667 668 Odds and Ends 669 ============= 670 671 Sometimes 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 673 will do nicely:: 674 675 class Employee: 676 pass 677 678 john = Employee() # Create an empty employee record 679 680 # Fill the fields of the record 681 john.name = 'John Doe' 682 john.dept = 'computer lab' 683 john.salary = 1000 684 685 A piece of Python code that expects a particular abstract data type can often be 686 passed a class that emulates the methods of that data type instead. For 687 instance, if you have a function that formats some data from a file object, you 688 can define a class with methods :meth:`read` and :meth:`!readline` that get the 689 data from a string buffer instead, and pass it as an argument. 690 691 .. (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.) 695 696 Instance method objects have attributes, too: ``m.im_self`` is the instance 697 object with the method :meth:`m`, and ``m.im_func`` is the function object 698 corresponding to the method. 699 700 701 .. _tut-exceptionclasses: 702 703 Exceptions Are Classes Too 704 ========================== 705 706 User-defined exceptions are identified by classes as well. Using this mechanism 707 it is possible to create extensible hierarchies of exceptions. 708 709 There are two new valid (semantic) forms for the :keyword:`raise` statement:: 710 711 raise Class, instance 712 713 raise instance 714 715 In the first form, ``instance`` must be an instance of :class:`Class` or of a 716 class derived from it. The second form is a shorthand for:: 717 718 raise instance.__class__, instance 719 720 A class in an :keyword:`except` clause is compatible with an exception if it is 721 the same class or a base class thereof (but not the other way around --- an 722 except clause listing a derived class is not compatible with a base class). For 723 example, the following code will print B, C, D in that order:: 724 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 742 Note that if the except clauses were reversed (with ``except B`` first), it 743 would have printed B, B, B --- the first matching except clause is triggered. 744 745 When an error message is printed for an unhandled exception, the exception's 746 class name is printed, then a colon and a space, and finally the instance 747 converted to a string using the built-in function :func:`str`. 748 749 750 .. _tut-iterators: 751 752 Iterators 753 ========= 754 755 By now you have probably noticed that most container objects can be looped over 756 using 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"): 767 print line, 768 769 This style of access is clear, concise, and convenient. The use of iterators 770 pervades and unifies Python. Behind the scenes, the :keyword:`for` statement 771 calls :func:`iter` on the container object. The function returns an iterator 772 object that defines the method :meth:`~iterator.next` which accesses elements 773 in 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. 776 This 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() 789 Traceback (most recent call last): 790 File "<stdin>", line 1, in <module> 791 it.next() 792 StopIteration 793 794 Having seen the mechanics behind the iterator protocol, it is easy to add 795 iterator behavior to your classes. Define an :meth:`__iter__` method which 796 returns an object with a :meth:`~iterator.next` method. If the class 797 defines :meth:`~iterator.next`, then :meth:`__iter__` can just return ``self``:: 798 799 class Reverse: 800 """Iterator for looping over a sequence backwards.""" 801 def __init__(self, data): 802 self.data = data 803 self.index = len(data) 804 805 def __iter__(self): 806 return self 807 808 def next(self): 809 if self.index == 0: 810 raise StopIteration 811 self.index = self.index - 1 812 return self.data[self.index] 813 814 :: 815 816 >>> rev = Reverse('spam') 817 >>> iter(rev) 818 <__main__.Reverse object at 0x00A1DB50> 819 >>> for char in rev: 820 ... print char 821 ... 822 m 823 a 824 p 825 s 826 827 828 .. _tut-generators: 829 830 Generators 831 ========== 832 833 :term:`Generator`\s are a simple and powerful tool for creating iterators. They 834 are written like regular functions but use the :keyword:`yield` statement 835 whenever they want to return data. Each time :func:`next` is called on it, the 836 generator resumes where it left off (it remembers all the data values and which 837 statement was last executed). An example shows that generators can be trivially 838 easy to create:: 839 840 def reverse(data): 841 for index in range(len(data)-1, -1, -1): 842 yield data[index] 843 844 :: 845 846 >>> for char in reverse('golf'): 847 ... print char 848 ... 849 f 850 l 851 o 852 g 853 854 Anything that can be done with generators can also be done with class-based 855 iterators as described in the previous section. What makes generators so 856 compact is that the :meth:`__iter__` and :meth:`~generator.next` methods 857 are created automatically. 858 859 Another key feature is that the local variables and execution state are 860 automatically saved between calls. This made the function easier to write and 861 much more clear than an approach using instance variables like ``self.index`` 862 and ``self.data``. 863 864 In addition to automatic method creation and saving program state, when 865 generators terminate, they automatically raise :exc:`StopIteration`. In 866 combination, these features make it easy to create iterators with no more effort 867 than writing a regular function. 868 869 870 .. _tut-genexps: 871 872 Generator Expressions 873 ===================== 874 875 Some simple generators can be coded succinctly as expressions using a syntax 876 similar to list comprehensions but with parentheses instead of square brackets. 877 These expressions are designed for situations where the generator is used right 878 away by an enclosing function. Generator expressions are more compact but less 879 versatile than full generator definitions and tend to be more memory friendly 880 than equivalent list comprehensions. 881 882 Examples:: 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 908 :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. 910 Obviously, using this violates the abstraction of namespace implementation, and 911 should be restricted to things like post-mortem debuggers. 912 913