From acdeee9b98727249d9c047d58c209558b453838d Mon Sep 17 00:00:00 2001 From: Chidi Orji Date: Fri, 4 Jan 2019 00:30:34 +0100 Subject: [PATCH] Refactor: Condense everything into the README file --- CONTRIBUTORS.markdown | 19 - Makefile | 14 - README.markdown | 9 - magicmethods.markdown => README.md | 869 +++++++++++++++++++---------- README.pdf | Bin 0 -> 222797 bytes appendix.markdown | 41 -- listings/access.py | 23 - listings/call.py | 13 - listings/closer.py | 16 - listings/descriptor.py | 24 - listings/fileobject.py | 13 - listings/list.py | 50 -- listings/slate.py | 31 - listings/word.py | 20 - magicmarkdown.py | 49 -- magicmethods.html | 773 ------------------------- magicmethods.pdf | Bin 203579 -> 0 bytes magicmethods.py | 204 ------- magicmethods.tex | 659 ---------------------- style.css | 143 ----- table.markdown | 32 -- 21 files changed, 586 insertions(+), 2416 deletions(-) delete mode 100755 CONTRIBUTORS.markdown delete mode 100755 Makefile delete mode 100755 README.markdown rename magicmethods.markdown => README.md (63%) mode change 100755 => 100644 create mode 100644 README.pdf delete mode 100755 appendix.markdown delete mode 100755 listings/access.py delete mode 100755 listings/call.py delete mode 100755 listings/closer.py delete mode 100755 listings/descriptor.py delete mode 100755 listings/fileobject.py delete mode 100755 listings/list.py delete mode 100755 listings/slate.py delete mode 100755 listings/word.py delete mode 100755 magicmarkdown.py delete mode 100644 magicmethods.html delete mode 100644 magicmethods.pdf delete mode 100755 magicmethods.py delete mode 100755 magicmethods.tex delete mode 100755 style.css delete mode 100755 table.markdown diff --git a/CONTRIBUTORS.markdown b/CONTRIBUTORS.markdown deleted file mode 100755 index 0e001d3..0000000 --- a/CONTRIBUTORS.markdown +++ /dev/null @@ -1,19 +0,0 @@ -## Thanks to the following people for helping out ## - - - stevelosh on Reddit for contributing the stylesheet - - Andrew Dalke for pointing out that I was missing `__index__`, `__getstate__`, and `__setstate__` - - ewiethoff on Reddit for suggesting a table mapping magic methods to any special syntax that invokes them - - richleland (Richard Leland) for providing styles for Pygments syntax highlighting - - Simon Sapin for pointing out a number of bugs - - sarenji (David Peter) for pointing out some bugs in the examples - - michaelcontento (Michael Contento) for fixing a missing argument in `__exit__` - - nosklo for giving some constructive criticism on #python - - rhettinger for pointing out a number of omissions in the guide - - aasted for pointing out an error in the organization of the guide - - seliopou for making the guide a little more visually appealing - - redtoad for correcting some typos - - bobuss for finding an error in the `AccessCounter` example - - Andrew-Crosio for finding yet another typo - - william-mi-leslie for finding weaknesses and errors in the guide's treatment of operator overloading - - petrushev for expanding the guide's description of `__reversed__` - - koorgoo for fixing some typos diff --git a/Makefile b/Makefile deleted file mode 100755 index efe5a20..0000000 --- a/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -docs: magicmethods.html magicmethods.pdf clean - -html: magicmethods.html - -pdf: magicmethods.pdf - -magicmethods.html: table.markdown magicmethods.markdown appendix.markdown - python magicmarkdown.py - -magicmethods.pdf: magicmethods.tex - pdflatex magicmethods.tex - -clean: - rm -f markedup.html magicmethods.log magicmethods.dvi magicmethods.aux diff --git a/README.markdown b/README.markdown deleted file mode 100755 index c0cc00e..0000000 --- a/README.markdown +++ /dev/null @@ -1,9 +0,0 @@ -##A guide to Python's magic methods.## -Written by Rafe Kettler in the year 2011. - -Licensed under Creative Commons CC--NC-BY-SA (see http://creativecommons.org/licenses/by-nc-sa/3.0/). Basically, noncommercial, requires attribution, must be reproduced with a similar license. 'Nuff said. - -Can be seen at http://www.rafekettler.com/magicmethods.html in relatively up to date form. - -## For forkers: ## -Edit `magicmethods.markdown`/`magicmethods.tex`, then run `make docs`. The build script requires the Python Markdown module, so you'll have to run `pip install markdown` if you don't already have it. Happy hacking! \ No newline at end of file diff --git a/magicmethods.markdown b/README.md old mode 100755 new mode 100644 similarity index 63% rename from magicmethods.markdown rename to README.md index 893a87b..47c6705 --- a/magicmethods.markdown +++ b/README.md @@ -1,4 +1,46 @@ -##Introduction## +# A guide to Python's magic methods + +Written by Rafe Kettler in the year 2011. Forked and reformatted by Orji Chidi. + +This fork is maintained in a branch called `singular`. The `master` branch maintains the original fork. + +Licensed under Creative Commons CC--NC-BY-SA (see ). Basically, noncommercial, requires attribution, must be reproduced with a similar license. 'Nuff said. + +## Contents + +1. Introduction +1. Construction and Initialization +1. Making Operators Work on Custom Classes + - Comparison magic methods + - Numeric magic methods + - Unary operators and functions + - Normal arithmetic operators + - Reflected arithmetic operators + - Augmented assignment + - Type conversion magic methods +1. Representing your Classes +1. Controlling Attribute Access +1. Making Custom Sequences + - Requirements + - The magic behind containers + - An example +1. Reflection +1. Abstract Base Classes +1. Callable Objects +1. Context Managers +1. Building Descriptor Objects +1. Copying +1. Pickling your Objects + - Pickling: A Quick Soak in the Brine + - Pickling your own Objects + - An Example +1. Conclusion +1. Appendix 1: How to Call Magic Methods +1. Appendix 2: Changes in Python 3 +1. Contributors +1. Code + +## Introduction This guide is the culmination of a few months' worth of blog posts. The subject is **magic methods**. @@ -8,11 +50,10 @@ So, to fix what I perceived as a flaw in Python's documentation, I set out to pr I hope you enjoy it. Use it as a tutorial, a refresher, or a reference; it's just intended to be a user-friendly guide to Python's magic methods. -##Construction and Initialization## +## Construction and Initialization Everyone knows the most basic magic method, `__init__`. It's the way that we can define the initialization behavior of an object. However, when I call `x = SomeClass()`, `__init__` is not the first thing to get called. Actually, it's a method called `__new__`, which actually creates the instance, then passes any arguments at creation on to the initializer. At the other end of the object's lifespan, there's `__del__`. Let's take a closer look at these 3 magic methods: - `__new__(cls, [...)` : `__new__` is the first method to get called in an object's instantiation. It takes the class, then any other arguments that it will pass along to `__init__`. `__new__` is used fairly rarely, but it does have its purposes, particularly when subclassing an immutable type like a tuple or a string. I don't want to go in to too much detail on `__new__` because it's not too useful, but it is covered in great detail [in the Python docs](http://www.python.org/download/releases/2.2/descrintro/#__new__). @@ -22,44 +63,46 @@ Everyone knows the most basic magic method, `__init__`. It's the way that we can `__del__(self)` : If `__new__` and `__init__` formed the constructor of the object, `__del__` is the destructor. It doesn't implement behavior for the statement `del x` (so that code would not translate to `x.__del__()`). Rather, it defines behavior for when an object is garbage collected. It can be quite useful for objects that might require extra cleanup upon deletion, like sockets or file objects. Be careful, however, as there is no guarantee that `__del__` will be executed if the object is still alive when the interpreter exits, so `__del__` can't serve as a replacement for good coding practices (like always closing a connection when you're done with it. In fact, `__del__` should almost never be used because of the precarious circumstances under which it is called; use it with caution! - Putting it all together, here's an example of `__init__` and `__del__` in action: - :::python - from os.path import join +```python +from os.path import join - class FileObject: - '''Wrapper for file objects to make sure the file gets closed on deletion.''' +class FileObject: + '''Wrapper for file objects to make sure the file gets closed on deletion.''' - def __init__(self, filepath='~', filename='sample.txt'): - # open a file filename in filepath in read and write mode - self.file = open(join(filepath, filename), 'r+') + def __init__(self, filepath='~', filename='sample.txt'): + # open a file filename in filepath in read and write mode + self.file = open(join(filepath, filename), 'r+') - def __del__(self): - self.file.close() - del self.file + def __del__(self): + self.file.close() + del self.file +``` -##Making Operators Work on Custom Classes## +## Making Operators Work on Custom Classes One of the biggest advantages of using Python's magic methods is that they provide a simple way to make objects behave like built-in types. That means you can avoid ugly, counter-intuitive, and nonstandard ways of performing basic operators. In some languages, it's common to do something like this: - :::python - if instance.equals(other_instance): - # do something +```python +if instance.equals(other_instance): + # do something +``` You could certainly do this in Python, too, but this adds confusion and is unnecessarily verbose. Different libraries might use different names for the same operations, making the client do way more work than necessary. With the power of magic methods, however, we can define one method (`__eq__`, in this case), and say what we _mean_ instead: - :::python - if instance == other_instance: - #do something +```python + +if instance == other_instance: + # do something +``` That's part of the power of magic methods. The vast majority of them allow us to define meaning for operators so that we can use them on our own classes just like they were built in types. -###Comparison magic methods### +### Comparison magic methods Python has a whole slew of magic methods designed to implement intuitive comparisons between objects using operators, not awkward method calls. They also provide a way to override the default Python behavior for comparisons of objects (by reference). Here's the list of those methods and what they do: - `__cmp__(self, other)` : `__cmp__` is the most basic of the comparison magic methods. It actually implements behavior for all of the comparison operators (<, ==, !=, etc.), but it might not do it the way you want (for example, if whether one instance was equal to another were determined by one criterion and and whether an instance is greater than another were determined by something else). `__cmp__` should return a negative integer if `self < other`, zero if `self == other`, and positive if `self > other`. It's usually best to define each comparison you need rather than define them all at once, but `__cmp__` can be a good way to save repetition and improve clarity when you need all comparisons implemented with similar criteria. @@ -81,43 +124,42 @@ Python has a whole slew of magic methods designed to implement intuitive compari `__ge__(self, other)` : Defines behavior for the greater-than-or-equal-to operator, `>=`. - For an example, consider a class to model a word. We might want to compare words lexicographically (by the alphabet), which is the default comparison behavior for strings, but we also might want to do it based on some other criterion, like length or number of syllables. In this example, we'll compare by length. Here's an implementation: - :::python - class Word(str): - '''Class for words, defining comparison based on word length.''' - - def __new__(cls, word): - # Note that we have to use __new__. This is because str is an immutable - # type, so we have to initialize it early (at creation) - if ' ' in word: - print "Value contains spaces. Truncating to first space." - word = word[:word.index(' ')] # Word is now all chars before first space - return str.__new__(cls, word) - - def __gt__(self, other): - return len(self) > len(other) - def __lt__(self, other): - return len(self) < len(other) - def __ge__(self, other): - return len(self) >= len(other) - def __le__(self, other): - return len(self) <= len(other) +```python +class Word(str): + '''Class for words, defining comparison based on word length.''' + + def __new__(cls, word): + # Note that we have to use __new__. This is because str is an immutable + # type, so we have to initialize it early (at creation) + if ' ' in word: + print "Value contains spaces. Truncating to first space." + word = word[:word.index(' ')] # Word is now all chars before first space + return str.__new__(cls, word) + + def __gt__(self, other): + return len(self) > len(other) + def __lt__(self, other): + return len(self) < len(other) + def __ge__(self, other): + return len(self) >= len(other) + def __le__(self, other): + return len(self) <= len(other) +``` Now, we can create two `Word`s (by using `Word('foo')` and `Word('bar')`) and compare them based on length. Note, however, that we didn't define `__eq__` and `__ne__`. This is because this would lead to some weird behavior (notably that `Word('foo') == Word('bar')` would evaluate to true). It wouldn't make sense to test for equality based on length, so we fall back on `str`'s implementation of equality. Now would be a good time to note that you don't have to define every comparison magic method to get rich comparisons. The standard library has kindly provided us with a class decorator in the module `functools` that will define all rich comparison methods if you only define `__eq__` and one other (e.g. `__gt__`, `__lt__`, etc.) This feature is only available in Python 2.7, but when you get a chance it saves a great deal of time and effort. You can use it by placing `@total_ordering` above your class definition. -###Numeric magic methods### +### Numeric magic methods Just like you can create ways for instances of your class to be compared with comparison operators, you can define behavior for numeric operators. Buckle your seat belts, folks...there's a lot of these. For organization's sake, I've split the numeric magic methods into 5 categories: unary operators, normal arithmetic operators, reflected arithmetic operators (more on this later), augmented assignment, and type conversions. -####Unary operators and functions#### +### Unary operators and functions Unary operators and functions only have one operand, e.g. negation, absolute value, etc. - `__pos__(self)` : Implements behavior for unary positive (e.g. `+some_object`) @@ -142,12 +184,10 @@ Unary operators and functions only have one operand, e.g. negation, absolute val `__trunc__(self)` : Implements behavior for `math.trunc()`, i.e., truncating to an integral. - -####Normal arithmetic operators#### +### Normal arithmetic operators Now, we cover the typical binary operators (and a function or two): +, -, * and the like. These are, for the most part, pretty self-explanatory. - `__add__(self, other)` : Implements addition. @@ -190,21 +230,22 @@ Now, we cover the typical binary operators (and a function or two): +, -, * and `__xor__(self, other)` : Implements bitwise xor using the `^` operator. -####Reflected arithmetic operators#### +### Reflected arithmetic operators You know how I said I would get to reflected arithmetic in a bit? Some of you might think it's some big, scary, foreign concept. It's actually quite simple. Here's an example: - :::python - some_object + other +```python +some_object + other +``` That was "normal" addition. The reflected equivalent is the same thing, except with the operands switched around: - :::python - other + some_object +```python +other + some_object +``` So, all of these magic methods do the same thing as their normal equivalents, except the perform the operation with other as the first operand and self as the second, rather than the other way around. In most cases, the result of a reflected operation is the same as its normal equivalent, so you may just end up defining `__radd__` as calling `__add__` and so on. Note that the object on the left hand side of the operator (`other` in the example) must not define (or return `NotImplemented`) for its definition of the non-reflected version of an operation. For instance, in the example, `some_object.__radd__` will only be called if `other` does not define `__add__`. - `__radd__(self, other)` : Implements reflected addition. @@ -247,19 +288,17 @@ So, all of these magic methods do the same thing as their normal equivalents, ex `__rxor__(self, other)` : Implements reflected bitwise xor using the `^` operator. - - -####Augmented assignment#### +### Augmented assignment Python also has a wide variety of magic methods to allow custom behavior to be defined for augmented assignment. You're probably already familiar with augmented assignment, it combines "normal" operators with assignment. If you still don't know what I'm talking about, here's an example: - :::python - x = 5 - x += 1 # in other words x = x + 1 +```python +x = 5 +x += 1 # in other words x = x + 1 +``` Each of these methods should return the value that the variable on the left hand side should be assigned to (for instance, for `a += b`, `__iadd__` might return `a + b`, which would be assigned to `a`). Here's the list: - `__iadd__(self, other)` : Implements addition with assignment. @@ -299,13 +338,10 @@ Each of these methods should return the value that the variable on the left hand `__ixor__(self, other)` : Implements bitwise xor with assignment using the `^=` operator. - - -####Type conversion magic methods#### +### Type conversion magic methods Python also has an array of magic methods designed to implement behavior for built in type conversion functions like `float()`. Here they are: - `__int__(self)` : Implements type conversion to int. @@ -333,12 +369,10 @@ Python also has an array of magic methods designed to implement behavior for bui `__coerce__(self, other)` : Method to implement mixed mode arithmetic. `__coerce__` should return `None` if type conversion is impossible. Otherwise, it should return a pair (2-tuple) of `self` and `other`, manipulated to have the same type. - -##Representing your Classes## +## Representing your Classes It's often useful to have a string representation of a class. In Python, there are a few methods that you can implement in your class definition to customize how built in functions that return representations of your class behave. - `__str__(self)` : Defines behavior for when `str()` is called on an instance of your class. @@ -365,11 +399,10 @@ It's often useful to have a string representation of a class. In Python, there a We're pretty much done with the boring (and example-free) part of the magic methods guide. Now that we've covered some of the more basic magic methods, it's time to move to more advanced material. -##Controlling Attribute Access## +## Controlling Attribute Access Many people coming to Python from other languages complain that it lacks true encapsulation for classes; that is, there's no way to define private attributes with public getter and setters. This couldn't be farther than the truth: it just happens that Python accomplishes a great deal of encapsulation through "magic", instead of explicit modifiers for methods or fields. Take a look: - `__getattr__(self, name)` : You can define behavior for when a user attempts to access an attribute that doesn't exist (either at all or yet). This can be useful for catching and redirecting common misspellings, giving warnings about using deprecated attributes (you can still choose to compute and return that attribute, if you wish), or deftly handing an `AttributeError`. It only gets called when a nonexistent attribute is accessed, however, so it isn't a true encapsulation solution. @@ -380,61 +413,63 @@ Many people coming to Python from other languages complain that it lacks true en : This is the exact same as `__setattr__`, but for deleting attributes instead of setting them. The same precautions need to be taken as with `__setattr__` as well in order to prevent infinite recursion (calling `del self.name` in the implementation of `__delattr__` would cause infinite recursion). `__getattribute__(self, name)` -: After all this, `__getattribute__` fits in pretty well with its companions `__setattr__` and `__delattr__`. However, I don't recommend you use it. `__getattribute__` can only be used with new-style classes (all classes are new-style in the newest versions of Python, and in older versions you can make a class new-style by subclassing `object`. It allows you to define rules for whenever an attribute's value is accessed. It suffers from some similar infinite recursion problems as its partners-in-crime (this time you call the base class's `__getattribute__` method to prevent this). It also mainly obviates the need for `__getattr__`, which, when `__getattribute__` is implemented, only gets called if it is called explicitly or an `AttributeError` is raised. This method can be used (after all, it's your choice), but I don't recommend it because it has a small use case (it's far more rare that we need special behavior to retrieve a value than to assign to it) and because it can be really difficult to implement bug-free. +: After all this, `__getattribute__` fits in pretty well with its companions `__setattr__` and `__delattr__`. However, I don't recommend you use it. `__getattribute__` can only be used with new-style classes (all classes are new-style in the newest versions of Python, and in older versions you can make a class new-style by subclassing `object`. It allows you to define rules for whenever an attribute's value is accessed. It suffers from some similar infinite recursion problems as its partners-in-crime (this time you call the base class's `__getattribute__` method to prevent this). It also mainly obviates the need for `__getattr__`, which only gets called when `__getattribute__` is implemented if it is called explicitly or an `AttributeError` is raised. This method can be used (after all, it's your choice), but I don't recommend it because it has a small use case (it's far more rare that we need special behavior to retrieve a value than to assign to it) and because it can be really difficult to implement bug-free. You can easily cause a problem in your definitions of any of the methods controlling attribute access. Consider this example: - :::python - def __setattr__(self, name, value): - self.name = value - # since every time an attribute is assigned, __setattr__() is called, this - # is recursion. - # so this really means self.__setattr__('name', value). Since the method - # keeps calling itself, the recursion goes on forever causing a crash +```python +def __setattr__(self, name, value): + self.name = value + # since every time an attribute is assigned, __setattr__() is called, this + # is recursion. + # so this really means self.__setattr__('name', value). Since the method + # keeps calling itself, the recursion goes on forever causing a crash - def __setattr__(self, name, value): - self.__dict__[name] = value # assigning to the dict of names in the class - # define custom behavior here +def __setattr__(self, name, value): + self.__dict__[name] = value # assigning to the dict of names in the class + # define custom behavior here +``` Again, Python's magic methods are incredibly powerful, and with great power comes great responsibility. It's important to know the proper way to use magic methods so you don't break any code. So, what have we learned about custom attribute access in Python? It's not to be used lightly. In fact, it tends to be excessively powerful and counter-intuitive. But the reason why it exists is to scratch a certain itch: Python doesn't seek to make bad things impossible, but just to make them difficult. Freedom is paramount, so you can really do whatever you want. Here's an example of some of the special attribute access methods in action (note that we use `super` because not all classes have an attribute `__dict__`): - :::python - class AccessCounter(object): - '''A class that contains a value and implements an access counter. - The counter increments each time the value is changed.''' +```python +class AccessCounter(object): + '''A class that contains a value and implements an access counter. + The counter increments each time the value is changed.''' - def __init__(self, val): - super(AccessCounter, self).__setattr__('counter', 0) - super(AccessCounter, self).__setattr__('value', val) + def __init__(self, val): + super(AccessCounter, self).__setattr__('counter', 0) + super(AccessCounter, self).__setattr__('value', val) - def __setattr__(self, name, value): - if name == 'value': - super(AccessCounter, self).__setattr__('counter', self.counter + 1) - # Make this unconditional. - # If you want to prevent other attributes to be set, raise AttributeError(name) - super(AccessCounter, self).__setattr__(name, value) + def __setattr__(self, name, value): + if name == 'value': + super(AccessCounter, self).__setattr__('counter', self.counter + 1) + # Make this unconditional. + # If you want to prevent other attributes to be set, raise AttributeError(name) + super(AccessCounter, self).__setattr__(name, value) - def __delattr__(self, name): - if name == 'value': - super(AccessCounter, self).__setattr__('counter', self.counter + 1) - super(AccessCounter, self).__delattr__(name) + def __delattr__(self, name): + if name == 'value': + super(AccessCounter, self).__setattr__('counter', self.counter + 1) + super(AccessCounter, self).__delattr__(name) +``` -##Making Custom Sequences## +## Making Custom Sequences There's a number of ways to get your Python classes to act like built in sequences (`dict`, `tuple`, `list`, `str`, etc.). These are by far my favorite magic methods in Python because of the absurd degree of control they give you and the way that they magically make a whole array of global functions work beautifully on instances of your class. But before we get down to the good stuff, a quick word on requirements. -####Requirements#### +### Requirements + Now that we're talking about creating your own sequences in Python, it's time to talk about _protocols_. Protocols are somewhat similar to interfaces in other languages in that they give you a set of methods you must define. However, in Python protocols are totally informal and require no explicit declarations to implement. Rather, they're more like guidelines. Why are we talking about protocols now? Because implementing custom container types in Python involves using some of these protocols. First, there's the protocol for defining immutable containers: to make an immutable container, you need only define `__len__` and `__getitem__` (more on these later). The mutable container protocol requires everything that immutable containers require plus `__setitem__` and `__delitem__`. Lastly, if you want your object to be iterable, you'll have to define `__iter__`, which returns an iterator. That iterator must conform to an iterator protocol, which requires iterators to have methods called `__iter__`(returning itself) and `next`. -####The magic behind containers#### +### The magic behind containers Without any more wait, here are the magic methods that containers use: - `__len__(self)` : Returns the length of the container. Part of the protocol for both immutable and mutable containers. @@ -459,176 +494,171 @@ Without any more wait, here are the magic methods that containers use: `__missing__(self, key)` : `__missing__` is used in subclasses of `dict`. It defines behavior for whenever a key is accessed that does not exist in a dictionary (so, for instance, if I had a dictionary `d` and said `d["george"]` when `"george"` is not a key in the dict, `d.__missing__("george")` would be called). -####An example#### +### An example For our example, let's look at a list that implements some functional constructs that you might be used to from other languages (Haskell, for example). - :::python - class FunctionalList: - '''A class wrapping a list with some extra functional magic, like head, - tail, init, last, drop, and take.''' - - def __init__(self, values=None): - if values is None: - self.values = [] - else: - self.values = values - - def __len__(self): - return len(self.values) - - def __getitem__(self, key): - # if key is of invalid type or value, the list values will raise the error - return self.values[key] - - def __setitem__(self, key, value): - self.values[key] = value - - def __delitem__(self, key): - del self.values[key] - - def __iter__(self): - return iter(self.values) - - def __reversed__(self): - return reversed(self.values) - - def append(self, value): - self.values.append(value) - def head(self): - # get the first element - return self.values[0] - def tail(self): - # get all elements after the first - return self.values[1:] - def init(self): - # get elements up to the last - return self.values[:-1] - def last(self): - # get last element - return self.values[-1] - def drop(self, n): - # get all elements except first n - return self.values[n:] - def take(self, n): - # get first n elements - return self.values[:n] +```python +class FunctionalList: + '''A class wrapping a list with some extra functional magic, like head, + tail, init, last, drop, and take.''' + + def __init__(self, values=None): + if values is None: + self.values = [] + else: + self.values = values + + def __len__(self): + return len(self.values) + + def __getitem__(self, key): + # if key is of invalid type or value, the list values will raise the error + return self.values[key] + + def __setitem__(self, key, value): + self.values[key] = value + + def __delitem__(self, key): + del self.values[key] + + def __iter__(self): + return iter(self.values) + + def __reversed__(self): + return reversed(self.values) + + def append(self, value): + self.values.append(value) + def head(self): + # get the first element + return self.values[0] + def tail(self): + # get all elements after the first + return self.values[1:] + def init(self): + # get elements up to the last + return self.values[:-1] + def last(self): + # get last element + return self.values[-1] + def drop(self, n): + # get all elements except first n + return self.values[n:] + def take(self, n): + # get first n elements + return self.values[:n] +``` There you have it, a (marginally) useful example of how to implement your own sequence. Of course, there are more useful applications of custom sequences, but quite a few of them are already implemented in the standard library (batteries included, right?), like `Counter`, `OrderedDict`, and `NamedTuple`. -##Reflection## +## Reflection You can also control how reflection using the built in functions `isinstance()` and `issubclass()`behaves by defining magic methods. The magic methods are: - `__instancecheck__(self, instance)` : Checks if an instance is an instance of the class you defined (e.g. `isinstance(instance, class)`. `__subclasscheck__(self, subclass)` : Checks if a class subclasses the class you defined (e.g. `issubclass(subclass, class)`). +The use case for these magic methods might seem small, and that may very well be true. I won't spend too much more time on reflection magic methods because they aren't very important, but they reflect something important about object-oriented programming in Python and Python in general: there is almost always an easy way to do something, even if it's rarely necessary. These magic methods might not seem useful, but if you ever need them you'll be glad that they're there (and that you read this guide!). +## Abstract Base Classes -The use case for these magic methods might seem small, and that may very well be true. I won't spend too much more time on reflection magic methods because they aren't very important, but they reflect something important about object-oriented programming in Python and Python in general: there is almost always an easy way to do something, even if it's rarely necessary. These magic methods might not seem useful, but if you ever need them you'll be glad that they're there (and that you read this guide!). +See . -##Callable Objects## +## Callable Objects As you may already know, in Python, functions are first-class objects. This means that they can be passed to functions and methods just as if they were objects of any other kind. This is an incredibly powerful feature. A special magic method in Python allows instances of your classes to behave as if they were functions, so that you can "call" them, pass them to functions that take functions as arguments, and so on. This is another powerful convenience feature that makes programming in Python that much sweeter. - `__call__(self, [args...])` : Allows an instance of a class to be called as a function. Essentially, this means that `x()` is the same as `x.__call__()`. Note that `__call__` takes a variable number of arguments; this means that you define `__call__` as you would any other function, taking however many arguments you'd like it to. +`__call__` can be particularly useful in classes whose instances that need to often change state. "Calling" the instance can be an intuitive and elegant way to change the object's state. An example might be a class representing an entity's position on a plane: +```python +class Entity: + '''Class to represent an entity. Callable to update the entity's position.''' -`__call__` can be particularly useful in classes with instances that need to often change state. "Calling" the instance can be an intuitive and elegant way to change the object's state. An example might be a class representing an entity's position on a plane: - - :::python - class Entity: - '''Class to represent an entity. Callable to update the entity's position.''' + def __init__(self, size, x, y): + self.x, self.y = x, y + self.size = size - def __init__(self, size, x, y): - self.x, self.y = x, y - self.size = size + def __call__(self, x, y): + '''Change the position of the entity.''' + self.x, self.y = x, y - def __call__(self, x, y): - '''Change the position of the entity.''' - self.x, self.y = x, y + # snip... +``` - # snip... - -##Context Managers## +## Context Managers In Python 2.5, a new keyword was introduced in Python along with a new method for code reuse: the `with` statement. The concept of context managers was hardly new in Python (it was implemented before as a part of the library), but not until [PEP 343](http://www.python.org/dev/peps/pep-0343/) was accepted did it achieve status as a first-class language construct. You may have seen `with` statements before: - :::python - with open('foo.txt') as bar: - # perform some action with bar +```python +with open('foo.txt') as bar: + # perform some action with bar +``` Context managers allow setup and cleanup actions to be taken for objects when their creation is wrapped with a `with` statement. The behavior of the context manager is determined by two magic methods: - `__enter__(self)` : Defines what the context manager should do at the beginning of the block created by the `with` statement. Note that the return value of `__enter__` is bound to the _target_ of the `with` statement, or the name after the `as`. `__exit__(self, exception_type, exception_value, traceback)` : Defines what the context manager should do after its block has been executed (or terminates). It can be used to handle exceptions, perform cleanup, or do something always done immediately after the action in the block. If the block executes successfully, `exception_type`, `exception_value`, and `traceback` will be `None`. Otherwise, you can choose to handle the exception or let the user handle it; if you want to handle it, make sure `__exit__` returns `True` after all is said and done. If you don't want the exception to be handled by the context manager, just let it happen. - - `__enter__` and `__exit__` can be useful for specific classes that have well-defined and common behavior for setup and cleanup. You can also use these methods to create generic context managers that wrap other objects. Here's an example: - :::python - class Closer: - '''A context manager to automatically close an object with a close method - in a with statement.''' +```python +class Closer: + '''A context manager to automatically close an object with a close method + in a with statement.''' - def __init__(self, obj): - self.obj = obj + def __init__(self, obj): + self.obj = obj - def __enter__(self): - return self.obj # bound to target + def __enter__(self): + return self.obj # bound to target - def __exit__(self, exception_type, exception_val, trace): - try: - self.obj.close() - except AttributeError: # obj isn't closable - print 'Not closable.' - return True # exception handled successfully + def __exit__(self, exception_type, exception_val, trace): + try: + self.obj.close() + except AttributeError: # obj isn't closable + print 'Not closable.' + return True # exception handled successfully +``` Here's an example of `Closer` in action, using an FTP connection to demonstrate it (a closable socket): - :::pythonconsole - >>> from magicmethods import Closer - >>> from ftplib import FTP - >>> with Closer(FTP('ftp.somesite.com')) as conn: - ... conn.dir() - ... - # output omitted for brevity - >>> conn.dir() - # long AttributeError message, can't use a connection that's closed - >>> with Closer(int(5)) as i: - ... i += 1 - ... - Not closable. - >>> i - 6 +```python +>>> from magicmethods import Closer +>>> from ftplib import FTP +>>> with Closer(FTP('ftp.somesite.com')) as conn: +... conn.dir() +... +# output omitted for brevity +>>> conn.dir() +# long AttributeError message, can't use a connection that's closed +>>> with Closer(int(5)) as i: +... i += 1 +... +Not closable. +>>> i +6 +``` See how our wrapper gracefully handled both proper and improper uses? That's the power of context managers and magic methods. Note that the Python standard library includes a module [contextlib](http://docs.python.org/library/contextlib.html) that contains a context manager, `contextlib.closing()`, that does approximately the same thing (without any handling of the case where an object does not have a `close()` method). -##Abstract Base Classes## - -See http://docs.python.org/2/library/abc.html. - -##Building Descriptor Objects## +## Building Descriptor Objects Descriptors are classes which, when accessed through either getting, setting, or deleting, can also alter other objects. Descriptors aren't meant to stand alone; rather, they're meant to be held by an owner class. Descriptors can be useful when building object-oriented databases or classes that have attributes whose values are dependent on each other. Descriptors are particularly useful when representing attributes in several different units of measurement or representing computed attributes (like distance from the origin in a class to represent a point on a grid). To be a descriptor, a class must have at least one of `__get__`, `__set__`, and `__delete__` implemented. Let's take a look at those magic methods: - `__get__(self, instance, owner)` : Define behavior for when the descriptor's value is retrieved. `instance` is the instance of the owner object. `owner` is the owner class itself. @@ -638,35 +668,35 @@ To be a descriptor, a class must have at least one of `__get__`, `__set__`, and `__delete__(self, instance)` : Define behavior for when the descriptor's value is deleted. `instance` is the instance of the owner object. - Now, an example of a useful application of descriptors: unit conversions. - :::python - class Meter(object): - '''Descriptor for a meter.''' +```python +class Meter(object): + '''Descriptor for a meter.''' - def __init__(self, value=0.0): - self.value = float(value) - def __get__(self, instance, owner): - return self.value - def __set__(self, instance, value): - self.value = float(value) + def __init__(self, value=0.0): + self.value = float(value) + def __get__(self, instance, owner): + return self.value + def __set__(self, instance, value): + self.value = float(value) - class Foot(object): - '''Descriptor for a foot.''' +class Foot(object): + '''Descriptor for a foot.''' - def __get__(self, instance, owner): - return instance.meter * 3.2808 - def __set__(self, instance, value): - instance.meter = float(value) / 3.2808 + def __get__(self, instance, owner): + return instance.meter * 3.2808 + def __set__(self, instance, value): + instance.meter = float(value) / 3.2808 - class Distance(object): - '''Class to represent distance holding two descriptors for feet and - meters.''' - meter = Meter() - foot = Foot() +class Distance(object): + '''Class to represent distance holding two descriptors for feet and + meters.''' + meter = Meter() + foot = Foot() +``` -##Copying## +## Copying Sometimes, particularly when dealing with mutable objects, you want to be able to copy an object and make changes without affecting what you copied from. This is where Python's [`copy`](http://docs.python.org/library/copy.html) comes into play. However (fortunately), Python modules are not sentient, so we don't have to worry about a Linux-based robot uprising, but we do have to tell Python how to efficiently copy things. @@ -678,41 +708,43 @@ Sometimes, particularly when dealing with mutable objects, you want to be able t What are some use cases for these magic methods? As always, in any case where you need more fine-grained control than what the default behavior gives you. For instance, if you are attempting to copy an object that stores a cache as a dictionary (which might be large), it might not make sense to copy the cache as well -- if the cache can be shared in memory between instances, then it should be. -##Pickling Your Objects## +## Pickling Your Objects If you spend time with other Pythonistas, chances are you've at least heard of pickling. Pickling is a serialization process for Python data structures, and can be incredibly useful when you need to store an object and retrieve it later (usually for caching). It's also a major source of worries and confusion. Pickling is so important that it doesn't just have its own module (`pickle`), but its own _protocol_ and the magic methods to go with it. But first, a brief word on how to pickle existing types(feel free to skip it if you already know). -###Pickling: A Quick Soak in the Brine### +### Pickling: A Quick Soak in the Brine -Let's dive into pickling. Say you have a dictionary that you want to store and retrieve later. You couldwrite it's contents to a file, carefully making sure that you write correct syntax, then retrieve it using either `exec()` or processing the file input. But this is precarious at best: if you store important data in plain text, it could be corrupted or changed in any number of ways to make your program crash or worse run malicious code on your computer. Instead, we're going to pickle it: +Let's dive into pickling. Say you have a dictionary that you want to store and retrieve later. You could write it's contents to a file, carefully making sure that you write correct syntax, then retrieve it using either `exec()` or processing the file input. But this is precarious at best: if you store important data in plain text, it could be corrupted or changed in any number of ways to make your program crash or worse run malicious code on your computer. Instead, we're going to pickle it: - :::python - import pickle +```python +import pickle - data = {'foo': [1, 2, 3], - 'bar': ('Hello', 'world!'), - 'baz': True} - jar = open('data.pkl', 'wb') - pickle.dump(data, jar) # write the pickled data to the file jar - jar.close() +data = {'foo': [1, 2, 3], + 'bar': ('Hello', 'world!'), + 'baz': True} +jar = open('data.pkl', 'wb') +pickle.dump(data, jar) # write the pickled data to the file jar +jar.close() +``` Now, a few hours later, we want it back. All we have to do is unpickle it: - :::python - import pickle +```python +import pickle - pkl_file = open('data.pkl', 'rb') # connect to the pickled data - data = pickle.load(pkl_file) # load it into a variable - print data - pkl_file.close() +pkl_file = open('data.pkl', 'rb') # connect to the pickled data +data = pickle.load(pkl_file) # load it into a variable +print data +pkl_file.close() +``` What happens? Exactly what you expect. It's just like we had `data` all along. Now, for a word of caution: pickling is not perfect. Pickle files are easily corrupted on accident and on purpose. Pickling may be more secure than using flat text files, but it still can be used to run malicious code. It's also incompatible across different versions of Python, so don't expect to distribute pickled objects and expect people to be able to open them. However, it can also be a powerful tool for caching and other common serialization tasks. -###Pickling your own Objects### +### Pickling your own Objects Pickling isn't just for built-in types. It's for any class that follows the pickle protocol. The pickle protocol has four optional methods for Python objects to customize how they act (it's a bit different for C extensions, but that's not in our scope): @@ -734,43 +766,314 @@ Pickling isn't just for built-in types. It's for any class that follows the pick `__reduce_ex__(self)` : `__reduce_ex__` exists for compatibility. If it is defined, `__reduce_ex__` will be called over `__reduce__` on pickling. `__reduce__` can be defined as well for older versions of the pickling API that did not support `__reduce_ex__`. -###An Example### +### An Example Our example is a `Slate`, which remembers what its values have been and when those values were written to it. However, this particular slate goes blank each time it is pickled: the current value will not be saved. - :::python - import time +```python +import time - class Slate: - '''Class to store a string and a changelog, and forget its value when - pickled.''' +class Slate: + '''Class to store a string and a changelog, and forget its value when + pickled.''' - def __init__(self, value): - self.value = value - self.last_change = time.asctime() - self.history = {} + def __init__(self, value): + self.value = value + self.last_change = time.asctime() + self.history = {} - def change(self, new_value): - # Change the value. Commit last value to history - self.history[self.last_change] = self.value - self.value = new_value - self.last_change = time.asctime() + def change(self, new_value): + # Change the value. Commit last value to history + self.history[self.last_change] = self.value + self.value = new_value + self.last_change = time.asctime() - def print_changes(self): - print 'Changelog for Slate object:' - for k, v in self.history.items(): - print '%s\t %s' % (k, v) + def print_changes(self): + print 'Changelog for Slate object:' + for k, v in self.history.items(): + print '%s\t %s' % (k, v) - def __getstate__(self): - # Deliberately do not return self.value or self.last_change. - # We want to have a "blank slate" when we unpickle. - return self.history + def __getstate__(self): + # Deliberately do not return self.value or self.last_change. + # We want to have a "blank slate" when we unpickle. + return self.history - def __setstate__(self, state): - # Make self.history = state and last_change and value undefined - self.history = state - self.value, self.last_change = None, None + def __setstate__(self, state): + # Make self.history = state and last_change and value undefined + self.history = state + self.value, self.last_change = None, None +``` -##Conclusion## +## Conclusion The goal of this guide is to bring something to anyone that reads it, regardless of their experience with Python or object-oriented programming. If you're just getting started with Python, you've gained valuable knowledge of the basics of writing feature-rich, elegant, and easy-to-use classes. If you're an intermediate Python programmer, you've probably picked up some slick new concepts and strategies and some good ways to reduce the amount of code written by you and clients. If you're an expert Pythonista, you've been refreshed on some of the stuff you might have forgotten about and maybe picked up a few new tricks along the way. Whatever your experience level, I hope that this trip through Python's special methods has been truly magical. (I couldn't resist the final pun!) + +## Appendix 1: How to Call Magic Methods + +Some of the magic methods in Python directly map to built-in functions; in this case, how to invoke them is fairly obvious. However, in other +cases, the invocation is far less obvious. This appendix is devoted to exposing non-obvious syntax that leads to magic methods getting called. + +Magic Method | When it gets invoked (example) | Explanation +---------------------- | ---------------------------------- | -------------------------------------------- +`__new__(cls [,...])` | `instance = MyClass(arg1, arg2)` | `__new__` is called on instance creation +`__init__(self [,...])` | `instance = MyClass(arg1, arg2)` | `__init__` is called on instance creation +`__cmp__(self, other)` | `self == other`, `self > other`, etc. | Called for any comparison +`__pos__(self)` | `+self` | Unary plus sign +`__neg__(self)` | `-self` | Unary minus sign +`__invert__(self)` | `~self` | Bitwise inversion +`__index__(self)` | `x[self]` | Conversion when object is used as index +`__nonzero__(self)` | `bool(self)` | Boolean value of the object +`__getattr__(self, name)` | `self.name # name doesn't exist` | Accessing nonexistent attribute +`__setattr__(self, name, val)` | `self.name = val` | Assigning to an attribute +`__delattr__(self, name)` | `del self.name` | Deleting an attribute +`__getattribute__(self, name)` | `self.name` | Accessing any attribute +`__getitem__(self, key)` | `self[key]` | Accessing an item using an index +`__setitem__(self, key, val)` | `self[key] = val` | Assigning to an item using an index +`__delitem__(self, key)` | `del self[key]` | Deleting an item using an index +`__iter__(self)` | `for x in self` | Iteration +`__contains__(self, value)` | `value in self`, `value not in self` | Membership tests using `in` +`__call__(self [,...])` | `self(args)` | "Calling" an instance +`__enter__(self)` | `with self as x:` | `with` statement context managers +`__exit__(self, exc, val, trace)` | `with self as x:` | `with` statement context managers +`__getstate__(self)` | `pickle.dump(pkl_file, self)` | Pickling +`__setstate__(self)` | `data = pickle.load(pkl_file)` | Pickling + +Hopefully, this table should have cleared up any questions you might have had about what syntax invokes which magic method. + +## Appendix 2: Changes in Python 3 + +Here, we document a few major places where Python 3 differs from 2.x in terms of its object model: + +- Since the distinction between string and unicode has been done away with in Python 3, `__unicode__` is gone and `__bytes__` (which behaves similarly to `__str__` and `__unicode__` in 2.7) exists for a new built-in for constructing byte arrays. +- Since division defaults to true division in Python 3, `__div__` is gone in Python 3 +- `__coerce__` is gone due to redundancy with other magic methods and confusing behavior +- `__cmp__` is gone due to redundancy with other magic methods +- `__nonzero__` has been renamed to `__bool__` + +## Contributors + + Thanks to the following people for helping out + +- stevelosh on Reddit for contributing the stylesheet +- Andrew Dalke for pointing out that I was missing `__index__`, `__getstate__`, and `__setstate__` +- ewiethoff on Reddit for suggesting a table mapping magic methods to any special syntax that invokes them +- richleland (Richard Leland) for providing styles for Pygments syntax highlighting +- Simon Sapin for pointing out a number of bugs +- sarenji (David Peter) for pointing out some bugs in the examples +- michaelcontento (Michael Contento) for fixing a missing argument in `__exit__` +- nosklo for giving some constructive criticism on #python +- rhettinger for pointing out a number of omissions in the guide +- aasted for pointing out an error in the organization of the guide +- seliopou for making the guide a little more visually appealing +- redtoad for correcting some typos +- bobuss for finding an error in the `AccessCounter` example +- Andrew-Crosio for finding yet another typo +- william-mi-leslie for finding weaknesses and errors in the guide's treatment of operator overloading +- petrushev for expanding the guide's description of `__reversed__` +- koorgoo for fixing some typos + +## Code + + ```python + """ + magicmethods.py + Want to try out the examples? Don't want to type them up yourself? Never worry, +just copy the examples from here and paste in your editor. + """ + + # FileObject class, demonstrating __init__ and __del__ + from os.path import join + + class FileObject: + """Wrapper for file objects to make sure the file gets closed on deletion.""" + + def __init__(self, filepath="~", filename="sample.txt"): + # open a file filename in filepath in read and write mode + self.file = open(join(filepath, filename), "r+") + + def __del__(self): + self.file.close() + del self.file + + # Word class, demonstrating __new__, comparisons + class Word(str): + """Class for words, defining comparison based on word length.""" + + def __new__(cls, word): + # Note that we have to use __new__. This is because str is an immutable + # type, so we have to initialize it early (at creation) + if " " in word: + print "Value contains spaces. Truncating to first space." + word = word[:word.index(" ")] # Word is now all chars before first space + return str.__new__(cls, word) + + def __gt__(self, other): + return len(self) > len(other) + def __lt__(self, other): + return len(self) < len(other) + def __ge__(self, other): + return len(self) >= len(other) + def __le__(self, other): + return len(self) <= len(other) + + # AccessCounter class, demonstrating __setattr__, __getattr__, and __delattr__ + class AccessCounter: + """A class that contains a value and implements an access counter. + The counter increments each time the value is changed.""" + + def __init__(self, val): + self.__dict__["counter"] = 0 + self.__dict__["value"] = val + + def __setattr__(self, name, value): + if name == "value": + self.__dict__["counter"] += 1 + self.__dict__["value"] = value + + def __delattr__(self, name): + if name == "value": + self.__dict__["counter"] += 1 + del self.__dict__["value"] + + # FunctionalList class, demonstrating __len__, __getitem__, __setitem__, __delitem__, + # __iter__, and __reversed__ + class FunctionalList: + """A class wrapping a list with some extra functional magic, like head, + tail, init, last, drop, and take.""" + + def __init__(self, values=None): + if values is None: + self.values = [] + else: + self.values = values + + def __len__(self): + return len(self.values) + + def __getitem__(self, key): + # if key is of invalid type or value, the list values will raise the error + return self.values[key] + + def __setitem__(self, key, value): + self.values[key] = value + + def __delitem__(self, key): + del self.values[key] + + def __iter__(self): + return iter(self.values) + + def __reversed__(self): + return reversed(self.values) + + def append(self, value): + self.values.append(value) + def head(self): + # get the first element + return self.values[0] + def tail(self): + # get all elements after the first + return self.values[1:] + def init(self): + # get elements up to the last + return self.values[:-1] + def last(self): + # get last element + return self.values[-1] + def drop(self, n): + # get all elements except first n + return self.values[n:] + def take(self, n): + # get first n elements + return self.values[:n] + + # Entity class demonstrating __call__ + class Entity: + """Class to represent an entity. Callable to update the entity"s position.""" + + def __init__(self, size, x, y): + self.x, self.y = x, y + self.size = size + + def __call__(self, x, y): + """Change the position of the entity.""" + self.x, self.y = x, y + + # snip... + + # Wrapper class to close an object in a with statement + class Closer: + """A context manager to automatically close an object with a close method + in a with statement.""" + + def __init__(self, obj): + self.obj = obj + + def __enter__(self): + return self.obj # bound to target + + def __exit__(self, exception_type, exception_val, trace): + try: + self.obj.close() + except AttributeError: # obj isn"t closable + print "Not closable." + return True # exception handled successfully + + # Classes to represent descriptors and their use + class Meter(object): + """Descriptor for a meter.""" + + def __init__(self, value=0.0): + self.value = float(value) + def __get__(self, instance, owner): + return self.value + def __set__(self, instance, value): + self.value = float(value) + + class Foot(object): + """Descriptor for a foot.""" + + def __get__(self, instance, owner): + return instance.meter * 3.2808 + def __set__(self, instance, value): + instance.meter = float(value) / 3.2808 + + class Distance(object): + """Class to represent distance holding two descriptors for feet and + meters.""" + meter = Meter() + foot = Foot() + + # Class to demo fine-tuning pickling + import time + + class Slate: + """Class to store a string and a changelog, and forget its value when + pickled.""" + + def __init__(self, value): + self.value = value + self.last_change = time.asctime() + self.history = {} + + def change(self, new_value): + # Change the value. Commit last value to history + self.history[self.last_change] = self.value + self.value = new_value + self.last_change = time.asctime() + + def print_changes(self): + print "Changelog for Slate object:" + for k, v in self.history.items(): + print "%s\t %s" % (k, v) + + def __getstate__(self): + # Deliberately do not return self.value or self.last_change. + # We want to have a "blank slate" when we unpickle. + return self.history + + def __setstate__(self, state): + # Make self.history = state and last_change and value undefined + self.history = state + self.value, self.last_change = None, None + ``` diff --git a/README.pdf b/README.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2238bffb0cba8ce467234dc411a81718b13e75cb GIT binary patch literal 222797 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�X}$<0zD#nQrFKM-rKuis75%(DDRuGF)1 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

A Guide to Python's Magic Methods

-

Rafe Kettler

-

Copyright © 2012 Rafe Kettler

-

Version 1.17

-

A PDF version of this guide can be obtained from my site or Github. The magic methods guide has a git repository at http://www.github.com/RafeKettler/magicmethods. Any issues can be reported -there, along with comments, (or even contributions!).

-

Table of Contents

-
    -
  1. Introduction
  2. -
  3. Construction and Initialization
  4. -
  5. Making Operators Work on Custom Classes -
  6. -
  7. Representing your Classes
  8. -
  9. Controlling Attribute Access
  10. -
  11. Making Custom Sequences
  12. -
  13. Reflection
  14. -
  15. Abstract Base Classes
  16. -
  17. Callable Objects
  18. -
  19. Context Managers
  20. -
  21. Building Descriptor Objects
  22. -
  23. Copying
  24. -
  25. Pickling your Objects
  26. -
  27. Conclusion
  28. -
  29. Appendix 1: How to Call Magic Methods
  30. -
  31. Appendix 2: Changes in Python 3
  32. -

Introduction

-

This guide is the culmination of a few months' worth of blog posts. The subject is magic methods.

-

What are magic methods? They're everything in object-oriented Python. They're special methods that you can define to add "magic" to your classes. They're always surrounded by double underscores (e.g. __init__ or __lt__). They're also not as well documented as they need to be. All of the magic methods for Python appear in the same section in the Python docs, but they're scattered about and only loosely organized. There's hardly an example to be found in that section (and that may very well be by design, since they're all detailed in the language reference, along with boring syntax descriptions, etc.).

-

So, to fix what I perceived as a flaw in Python's documentation, I set out to provide some more plain-English, example-driven documentation for Python's magic methods. I started out with weekly blog posts, and now that I've finished with those, I've put together this guide.

-

I hope you enjoy it. Use it as a tutorial, a refresher, or a reference; it's just intended to be a user-friendly guide to Python's magic methods.

-

Construction and Initialization

-

Everyone knows the most basic magic method, __init__. It's the way that we can define the initialization behavior of an object. However, when I call x = SomeClass(), __init__ is not the first thing to get called. Actually, it's a method called __new__, which actually creates the instance, then passes any arguments at creation on to the initializer. At the other end of the object's lifespan, there's __del__. Let's take a closer look at these 3 magic methods:

-
-
__new__(cls, [...)
-
__new__ is the first method to get called in an object's instantiation. It takes the class, then any other arguments that it will pass along to __init__. __new__ is used fairly rarely, but it does have its purposes, particularly when subclassing an immutable type like a tuple or a string. I don't want to go in to too much detail on __new__ because it's not too useful, but it is covered in great detail in the Python docs.
-
__init__(self, [...)
-
The initializer for the class. It gets passed whatever the primary constructor was called with (so, for example, if we called x = SomeClass(10, 'foo'), __init__ would get passed 10 and 'foo' as arguments. __init__ is almost universally used in Python class definitions.
-
__del__(self)
-
If __new__ and __init__ formed the constructor of the object, __del__ is the destructor. It doesn't implement behavior for the statement del x (so that code would not translate to x.__del__()). Rather, it defines behavior for when an object is garbage collected. It can be quite useful for objects that might require extra cleanup upon deletion, like sockets or file objects. Be careful, however, as there is no guarantee that __del__ will be executed if the object is still alive when the interpreter exits, so __del__ can't serve as a replacement for good coding practices (like always closing a connection when you're done with it. In fact, __del__ should almost never be used because of the precarious circumstances under which it is called; use it with caution!
-
-

Putting it all together, here's an example of __init__ and __del__ in action:

-
from os.path import join
-
-class FileObject:
-    '''Wrapper for file objects to make sure the file gets closed on deletion.'''
-
-    def __init__(self, filepath='~', filename='sample.txt'):
-        # open a file filename in filepath in read and write mode
-        self.file = open(join(filepath, filename), 'r+')
-
-    def __del__(self):
-        self.file.close()
-        del self.file
- - -

Making Operators Work on Custom Classes

-

One of the biggest advantages of using Python's magic methods is that they provide a simple way to make objects behave like built-in types. That means you can avoid ugly, counter-intuitive, and nonstandard ways of performing basic operators. In some languages, it's common to do something like this:

-
if instance.equals(other_instance):
-    # do something
- - -

You could certainly do this in Python, too, but this adds confusion and is unnecessarily verbose. Different libraries might use different names for the same operations, making the client do way more work than necessary. With the power of magic methods, however, we can define one method (__eq__, in this case), and say what we mean instead:

-
if instance == other_instance:
-    #do something
- - -

That's part of the power of magic methods. The vast majority of them allow us to define meaning for operators so that we can use them on our own classes just like they were built in types.

-

Comparison magic methods

-

Python has a whole slew of magic methods designed to implement intuitive comparisons between objects using operators, not awkward method calls. They also provide a way to override the default Python behavior for comparisons of objects (by reference). Here's the list of those methods and what they do:

-
-
__cmp__(self, other)
-
__cmp__ is the most basic of the comparison magic methods. It actually implements behavior for all of the comparison operators (<, ==, !=, etc.), but it might not do it the way you want (for example, if whether one instance was equal to another were determined by one criterion and and whether an instance is greater than another were determined by something else). __cmp__ should return a negative integer if self < other, zero if self == other, and positive if self > other. It's usually best to define each comparison you need rather than define them all at once, but __cmp__ can be a good way to save repetition and improve clarity when you need all comparisons implemented with similar criteria.
-
__eq__(self, other)
-
Defines behavior for the equality operator, ==.
-
__ne__(self, other)
-
Defines behavior for the inequality operator, !=.
-
__lt__(self, other)
-
Defines behavior for the less-than operator, <.
-
__gt__(self, other)
-
Defines behavior for the greater-than operator, >.
-
__le__(self, other)
-
Defines behavior for the less-than-or-equal-to operator, <=.
-
__ge__(self, other)
-
Defines behavior for the greater-than-or-equal-to operator, >=.
-
-

For an example, consider a class to model a word. We might want to compare words lexicographically (by the alphabet), which is the default comparison behavior for strings, but we also might want to do it based on some other criterion, like length or number of syllables. In this example, we'll compare by length. Here's an implementation:

-
class Word(str):
-    '''Class for words, defining comparison based on word length.'''
-
-    def __new__(cls, word):
-        # Note that we have to use __new__. This is because str is an immutable
-        # type, so we have to initialize it early (at creation)
-        if ' ' in word:
-            print "Value contains spaces. Truncating to first space."
-            word = word[:word.index(' ')] # Word is now all chars before first space
-        return str.__new__(cls, word)
-
-    def __gt__(self, other):
-        return len(self) > len(other)
-    def __lt__(self, other):
-        return len(self) < len(other)
-    def __ge__(self, other):
-        return len(self) >= len(other)
-    def __le__(self, other):
-        return len(self) <= len(other)
- - -

Now, we can create two Words (by using Word('foo') and Word('bar')) and compare them based on length. Note, however, that we didn't define __eq__ and __ne__. This is because this would lead to some weird behavior (notably that Word('foo') == Word('bar') would evaluate to true). It wouldn't make sense to test for equality based on length, so we fall back on str's implementation of equality.

-

Now would be a good time to note that you don't have to define every comparison magic method to get rich comparisons. The standard library has kindly provided us with a class decorator in the module functools that will define all rich comparison methods if you only define __eq__ and one other (e.g. __gt__, __lt__, etc.) This feature is only available in Python 2.7, but when you get a chance it saves a great deal of time and effort. You can use it by placing @total_ordering above your class definition.

-

Numeric magic methods

-

Just like you can create ways for instances of your class to be compared with comparison operators, you can define behavior for numeric operators. Buckle your seat belts, folks...there's a lot of these. For organization's sake, I've split the numeric magic methods into 5 categories: unary operators, normal arithmetic operators, reflected arithmetic operators (more on this later), augmented assignment, and type conversions.

-

Unary operators and functions

-

Unary operators and functions only have one operand, e.g. negation, absolute value, etc.

-
-
__pos__(self)
-
Implements behavior for unary positive (e.g. +some_object)
-
__neg__(self)
-
Implements behavior for negation (e.g. -some_object)
-
__abs__(self)
-
Implements behavior for the built in abs() function.
-
__invert__(self)
-
Implements behavior for inversion using the ~ operator. For an explanation on what this does, see the Wikipedia article on bitwise operations.
-
__round__(self, n)
-
Implements behavior for the built in round() function. n is the number of decimal places to round to.
-
__floor__(self)
-
Implements behavior for math.floor(), i.e., rounding down to the nearest integer.
-
__ceil__(self)
-
Implements behavior for math.ceil(), i.e., rounding up to the nearest integer.
-
__trunc__(self)
-
Implements behavior for math.trunc(), i.e., truncating to an integral.
-
-

Normal arithmetic operators

-

Now, we cover the typical binary operators (and a function or two): +, -, * and the like. These are, for the most part, pretty self-explanatory.

-
-
__add__(self, other)
-
Implements addition.
-
__sub__(self, other)
-
Implements subtraction.
-
__mul__(self, other)
-
Implements multiplication.
-
__floordiv__(self, other)
-
Implements integer division using the // operator.
-
__div__(self, other)
-
Implements division using the / operator.
-
__truediv__(self, other)
-
Implements true division. Note that this only works when from __future__ import division is in effect.
-
__mod__(self, other)
-
Implements modulo using the % operator.
-
__divmod__(self, other)
-
Implements behavior for long division using the divmod() built in function.
-
__pow__
-
Implements behavior for exponents using the ** operator.
-
__lshift__(self, other)
-
Implements left bitwise shift using the << operator.
-
__rshift__(self, other)
-
Implements right bitwise shift using the >> operator.
-
__and__(self, other)
-
Implements bitwise and using the & operator.
-
__or__(self, other)
-
Implements bitwise or using the | operator.
-
__xor__(self, other)
-
Implements bitwise xor using the ^ operator.
-
-

Reflected arithmetic operators

-

You know how I said I would get to reflected arithmetic in a bit? Some of you might think it's some big, scary, foreign concept. It's actually quite simple. Here's an example:

-
some_object + other
- - -

That was "normal" addition. The reflected equivalent is the same thing, except with the operands switched around:

-
other + some_object
- - -

So, all of these magic methods do the same thing as their normal equivalents, except the perform the operation with other as the first operand and self as the second, rather than the other way around. In most cases, the result of a reflected operation is the same as its normal equivalent, so you may just end up defining __radd__ as calling __add__ and so on. Note that the object on the left hand side of the operator (other in the example) must not define (or return NotImplemented) for its definition of the non-reflected version of an operation. For instance, in the example, some_object.__radd__ will only be called if other does not define __add__.

-
-
__radd__(self, other)
-
Implements reflected addition.
-
__rsub__(self, other)
-
Implements reflected subtraction.
-
__rmul__(self, other)
-
Implements reflected multiplication.
-
__rfloordiv__(self, other)
-
Implements reflected integer division using the // operator.
-
__rdiv__(self, other)
-
Implements reflected division using the / operator.
-
__rtruediv__(self, other)
-
Implements reflected true division. Note that this only works when from __future__ import division is in effect.
-
__rmod__(self, other)
-
Implements reflected modulo using the % operator.
-
__rdivmod__(self, other)
-
Implements behavior for long division using the divmod() built in function, when divmod(other, self) is called.
-
__rpow__
-
Implements behavior for reflected exponents using the ** operator.
-
__rlshift__(self, other)
-
Implements reflected left bitwise shift using the << operator.
-
__rrshift__(self, other)
-
Implements reflected right bitwise shift using the >> operator.
-
__rand__(self, other)
-
Implements reflected bitwise and using the & operator.
-
__ror__(self, other)
-
Implements reflected bitwise or using the | operator.
-
__rxor__(self, other)
-
Implements reflected bitwise xor using the ^ operator.
-
-

Augmented assignment

-

Python also has a wide variety of magic methods to allow custom behavior to be defined for augmented assignment. You're probably already familiar with augmented assignment, it combines "normal" operators with assignment. If you still don't know what I'm talking about, here's an example:

-
x = 5
-x += 1 # in other words x = x + 1
- - -

Each of these methods should return the value that the variable on the left hand side should be assigned to (for instance, for a += b, __iadd__ might return a + b, which would be assigned to a). Here's the list:

-
-
__iadd__(self, other)
-
Implements addition with assignment.
-
__isub__(self, other)
-
Implements subtraction with assignment.
-
__imul__(self, other)
-
Implements multiplication with assignment.
-
__ifloordiv__(self, other)
-
Implements integer division with assignment using the //= operator.
-
__idiv__(self, other)
-
Implements division with assignment using the /= operator.
-
__itruediv__(self, other)
-
Implements true division with assignment. Note that this only works when from __future__ import division is in effect.
-
__imod__(self, other)
-
Implements modulo with assignment using the %= operator.
-
__ipow__
-
Implements behavior for exponents with assignment using the **= operator.
-
__ilshift__(self, other)
-
Implements left bitwise shift with assignment using the <<= operator.
-
__irshift__(self, other)
-
Implements right bitwise shift with assignment using the >>= operator.
-
__iand__(self, other)
-
Implements bitwise and with assignment using the &= operator.
-
__ior__(self, other)
-
Implements bitwise or with assignment using the |= operator.
-
__ixor__(self, other)
-
Implements bitwise xor with assignment using the ^= operator.
-
-

Type conversion magic methods

-

Python also has an array of magic methods designed to implement behavior for built in type conversion functions like float(). Here they are:

-
-
__int__(self)
-
Implements type conversion to int.
-
__long__(self)
-
Implements type conversion to long.
-
__float__(self)
-
Implements type conversion to float.
-
__complex__(self)
-
Implements type conversion to complex.
-
__oct__(self)
-
Implements type conversion to octal.
-
__hex__(self)
-
Implements type conversion to hexadecimal.
-
__index__(self)
-
Implements type conversion to an int when the object is used in a slice expression. If you define a custom numeric type that might be used in slicing, you should define __index__.
-
__trunc__(self)
-
Called when math.trunc(self) is called. __trunc__ should return the value of `self truncated to an integral type (usually a long).
-
__coerce__(self, other)
-
Method to implement mixed mode arithmetic. __coerce__ should return None if type conversion is impossible. Otherwise, it should return a pair (2-tuple) of self and other, manipulated to have the same type.
-
-

Representing your Classes

-

It's often useful to have a string representation of a class. In Python, there are a few methods that you can implement in your class definition to customize how built in functions that return representations of your class behave.

-
-
__str__(self)
-
Defines behavior for when str() is called on an instance of your class.
-
__repr__(self)
-
Defines behavior for when repr() is called on an instance of your class. The major difference between str() and repr() is intended audience. repr() is intended to produce output that is mostly machine-readable (in many cases, it could be valid Python code even), whereas str() is intended to be human-readable.
-
__unicode__(self)
-
Defines behavior for when unicode() is called on an instance of your class. unicode() is like str(), but it returns a unicode string. Be wary: if a client calls str() on an instance of your class and you've only defined __unicode__(), it won't work. You should always try to define __str__() as well in case someone doesn't have the luxury of using unicode.
-
__format__(self, formatstr)
-
Defines behavior for when an instance of your class is used in new-style string formatting. For instance, "Hello, {0:abc}!".format(a) would lead to the call a.__format__("abc"). This can be useful for defining your own numerical or string types that you might like to give special formatting options.
-
__hash__(self)
-
Defines behavior for when hash() is called on an instance of your class. It has to return an integer, and its result is used for quick key comparison in dictionaries. Note that this usually entails implementing __eq__ as well. Live by the following rule: a == b implies hash(a) == hash(b).
-
__nonzero__(self)
-
Defines behavior for when bool() is called on an instance of your class. Should return True or False, depending on whether you would want to consider the instance to be True or False.
-
__dir__(self)
-
Defines behavior for when dir() is called on an instance of your class. This method should return a list of attributes for the user. Typically, implementing __dir__ is unnecessary, but it can be vitally important for interactive use of your classes if you redefine __getattr__ or __getattribute__ (which you will see in the next section) or are otherwise dynamically generating attributes.
-
__sizeof__(self)
-
Defines behavior for when sys.getsizeof() is called on an instance of your class. This should return the size of your object, in bytes. This is generally more useful for Python classes implemented in C extensions, but it helps to be aware of it.
-
-

We're pretty much done with the boring (and example-free) part of the magic methods guide. Now that we've covered some of the more basic magic methods, it's time to move to more advanced material.

-

Controlling Attribute Access

-

Many people coming to Python from other languages complain that it lacks true encapsulation for classes; that is, there's no way to define private attributes with public getter and setters. This couldn't be farther than the truth: it just happens that Python accomplishes a great deal of encapsulation through "magic", instead of explicit modifiers for methods or fields. Take a look:

-
-
__getattr__(self, name)
-
You can define behavior for when a user attempts to access an attribute that doesn't exist (either at all or yet). This can be useful for catching and redirecting common misspellings, giving warnings about using deprecated attributes (you can still choose to compute and return that attribute, if you wish), or deftly handing an AttributeError. It only gets called when a nonexistent attribute is accessed, however, so it isn't a true encapsulation solution.
-
__setattr__(self, name, value)
-
Unlike __getattr__, __setattr__ is an encapsulation solution. It allows you to define behavior for assignment to an attribute regardless of whether or not that attribute exists, meaning you can define custom rules for any changes in the values of attributes. However, you have to be careful with how you use __setattr__, as the example at the end of the list will show.
-
__delattr__(self, name)
-
This is the exact same as __setattr__, but for deleting attributes instead of setting them. The same precautions need to be taken as with __setattr__ as well in order to prevent infinite recursion (calling del self.name in the implementation of __delattr__ would cause infinite recursion).
-
__getattribute__(self, name)
-
After all this, __getattribute__ fits in pretty well with its companions __setattr__ and __delattr__. However, I don't recommend you use it. __getattribute__ can only be used with new-style classes (all classes are new-style in the newest versions of Python, and in older versions you can make a class new-style by subclassing object. It allows you to define rules for whenever an attribute's value is accessed. It suffers from some similar infinite recursion problems as its partners-in-crime (this time you call the base class's __getattribute__ method to prevent this). It also mainly obviates the need for __getattr__, which, when __getattribute__ is implemented, only gets called if it is called explicitly or an AttributeError is raised. This method can be used (after all, it's your choice), but I don't recommend it because it has a small use case (it's far more rare that we need special behavior to retrieve a value than to assign to it) and because it can be really difficult to implement bug-free.
-
-

You can easily cause a problem in your definitions of any of the methods controlling attribute access. Consider this example:

-
def __setattr__(self, name, value):
-    self.name = value
-    # since every time an attribute is assigned, __setattr__() is called, this
-    # is recursion.
-    # so this really means self.__setattr__('name', value). Since the method
-    # keeps calling itself, the recursion goes on forever causing a crash
-
-def __setattr__(self, name, value):
-    self.__dict__[name] = value # assigning to the dict of names in the class
-    # define custom behavior here
- - -

Again, Python's magic methods are incredibly powerful, and with great power comes great responsibility. It's important to know the proper way to use magic methods so you don't break any code.

-

So, what have we learned about custom attribute access in Python? It's not to be used lightly. In fact, it tends to be excessively powerful and counter-intuitive. But the reason why it exists is to scratch a certain itch: Python doesn't seek to make bad things impossible, but just to make them difficult. Freedom is paramount, so you can really do whatever you want. Here's an example of some of the special attribute access methods in action (note that we use super because not all classes have an attribute __dict__):

-
class AccessCounter(object):
-    '''A class that contains a value and implements an access counter.
-    The counter increments each time the value is changed.'''
-
-    def __init__(self, val):
-        super(AccessCounter, self).__setattr__('counter', 0)
-        super(AccessCounter, self).__setattr__('value', val)
-
-    def __setattr__(self, name, value):
-        if name == 'value':
-            super(AccessCounter, self).__setattr__('counter', self.counter + 1)
-        # Make this unconditional.
-        # If you want to prevent other attributes to be set, raise AttributeError(name)
-        super(AccessCounter, self).__setattr__(name, value)
-
-    def __delattr__(self, name):
-        if name == 'value':
-            super(AccessCounter, self).__setattr__('counter', self.counter + 1)
-        super(AccessCounter, self).__delattr__(name)
- - -

Making Custom Sequences

-

There's a number of ways to get your Python classes to act like built in sequences (dict, tuple, list, str, etc.). These are by far my favorite magic methods in Python because of the absurd degree of control they give you and the way that they magically make a whole array of global functions work beautifully on instances of your class. But before we get down to the good stuff, a quick word on requirements.

-

Requirements

-

Now that we're talking about creating your own sequences in Python, it's time to talk about protocols. Protocols are somewhat similar to interfaces in other languages in that they give you a set of methods you must define. However, in Python protocols are totally informal and require no explicit declarations to implement. Rather, they're more like guidelines.

-

Why are we talking about protocols now? Because implementing custom container types in Python involves using some of these protocols. First, there's the protocol for defining immutable containers: to make an immutable container, you need only define __len__ and __getitem__ (more on these later). The mutable container protocol requires everything that immutable containers require plus __setitem__ and __delitem__. Lastly, if you want your object to be iterable, you'll have to define __iter__, which returns an iterator. That iterator must conform to an iterator protocol, which requires iterators to have methods called __iter__(returning itself) and next.

-

The magic behind containers

-

Without any more wait, here are the magic methods that containers use:

-
-
__len__(self)
-
Returns the length of the container. Part of the protocol for both immutable and mutable containers.
-
__getitem__(self, key)
-
Defines behavior for when an item is accessed, using the notation self[key]. This is also part of both the mutable and immutable container protocols. It should also raise appropriate exceptions: TypeError if the type of the key is wrong and KeyError if there is no corresponding value for the key.
-
__setitem__(self, key, value)
-
Defines behavior for when an item is assigned to, using the notation self[nkey] = value. This is part of the mutable container protocol. Again, you should raise KeyError and TypeError where appropriate.
-
__delitem__(self, key)
-
Defines behavior for when an item is deleted (e.g. del self[key]). This is only part of the mutable container protocol. You must raise the appropriate exceptions when an invalid key is used.
-
__iter__(self)
-
Should return an iterator for the container. Iterators are returned in a number of contexts, most notably by the iter() built in function and when a container is looped over using the form for x in container:. Iterators are their own objects, and they also must define an __iter__ method that returns self.
-
__reversed__(self)
-
Called to implement behavior for the reversed() built in function. Should return a reversed version of the sequence. Implement this only if the sequence class is ordered, like list or tuple.
-
__contains__(self, item)
-
__contains__ defines behavior for membership tests using in and not in. Why isn't this part of a sequence protocol, you ask? Because when __contains__ isn't defined, Python just iterates over the sequence and returns True if it comes across the item it's looking for.
-
__missing__(self, key)
-
__missing__ is used in subclasses of dict. It defines behavior for whenever a key is accessed that does not exist in a dictionary (so, for instance, if I had a dictionary d and said d["george"] when "george" is not a key in the dict, d.__missing__("george") would be called).
-
-

An example

-

For our example, let's look at a list that implements some functional constructs that you might be used to from other languages (Haskell, for example).

-
class FunctionalList:
-    '''A class wrapping a list with some extra functional magic, like head,
-    tail, init, last, drop, and take.'''
-
-    def __init__(self, values=None):
-        if values is None:
-            self.values = []
-        else:
-            self.values = values
-
-    def __len__(self):
-        return len(self.values)
-
-    def __getitem__(self, key):
-        # if key is of invalid type or value, the list values will raise the error
-        return self.values[key]
-
-    def __setitem__(self, key, value):
-        self.values[key] = value
-
-    def __delitem__(self, key):
-        del self.values[key]
-
-    def __iter__(self):
-        return iter(self.values)
-
-    def __reversed__(self):
-        return reversed(self.values)
-
-    def append(self, value):
-        self.values.append(value)
-    def head(self):
-        # get the first element
-        return self.values[0]
-    def tail(self):
-        # get all elements after the first
-        return self.values[1:]
-    def init(self):
-        # get elements up to the last
-        return self.values[:-1]
-    def last(self):
-        # get last element
-        return self.values[-1]
-    def drop(self, n):
-        # get all elements except first n
-        return self.values[n:]
-    def take(self, n):
-        # get first n elements
-        return self.values[:n]
- - -

There you have it, a (marginally) useful example of how to implement your own sequence. Of course, there are more useful applications of custom sequences, but quite a few of them are already implemented in the standard library (batteries included, right?), like Counter, OrderedDict, and NamedTuple.

-

Reflection

-

You can also control how reflection using the built in functions isinstance() and issubclass()behaves by defining magic methods. The magic methods are:

-
-
__instancecheck__(self, instance)
-
Checks if an instance is an instance of the class you defined (e.g. isinstance(instance, class).
-
__subclasscheck__(self, subclass)
-
Checks if a class subclasses the class you defined (e.g. issubclass(subclass, class)).
-
-

The use case for these magic methods might seem small, and that may very well be true. I won't spend too much more time on reflection magic methods because they aren't very important, but they reflect something important about object-oriented programming in Python and Python in general: there is almost always an easy way to do something, even if it's rarely necessary. These magic methods might not seem useful, but if you ever need them you'll be glad that they're there (and that you read this guide!).

-

Callable Objects

-

As you may already know, in Python, functions are first-class objects. This means that they can be passed to functions and methods just as if they were objects of any other kind. This is an incredibly powerful feature.

-

A special magic method in Python allows instances of your classes to behave as if they were functions, so that you can "call" them, pass them to functions that take functions as arguments, and so on. This is another powerful convenience feature that makes programming in Python that much sweeter.

-
-
__call__(self, [args...])
-
Allows an instance of a class to be called as a function. Essentially, this means that x() is the same as x.__call__(). Note that __call__ takes a variable number of arguments; this means that you define __call__ as you would any other function, taking however many arguments you'd like it to.
-
-

__call__ can be particularly useful in classes with instances that need to often change state. "Calling" the instance can be an intuitive and elegant way to change the object's state. An example might be a class representing an entity's position on a plane:

-
class Entity:
-    '''Class to represent an entity. Callable to update the entity's position.'''
-
-    def __init__(self, size, x, y):
-        self.x, self.y = x, y
-        self.size = size
-
-    def __call__(self, x, y):
-        '''Change the position of the entity.'''
-        self.x, self.y = x, y
-
-    # snip...
- - -

Context Managers

-

In Python 2.5, a new keyword was introduced in Python along with a new method for code reuse: the with statement. The concept of context managers was hardly new in Python (it was implemented before as a part of the library), but not until PEP 343 was accepted did it achieve status as a first-class language construct. You may have seen with statements before:

-
with open('foo.txt') as bar:
-    # perform some action with bar
- - -

Context managers allow setup and cleanup actions to be taken for objects when their creation is wrapped with a with statement. The behavior of the context manager is determined by two magic methods:

-
-
__enter__(self)
-
Defines what the context manager should do at the beginning of the block created by the with statement. Note that the return value of __enter__ is bound to the target of the with statement, or the name after the as.
-
__exit__(self, exception_type, exception_value, traceback)
-
Defines what the context manager should do after its block has been executed (or terminates). It can be used to handle exceptions, perform cleanup, or do something always done immediately after the action in the block. If the block executes successfully, exception_type, exception_value, and traceback will be None. Otherwise, you can choose to handle the exception or let the user handle it; if you want to handle it, make sure __exit__ returns True after all is said and done. If you don't want the exception to be handled by the context manager, just let it happen.
-
-

__enter__ and __exit__ can be useful for specific classes that have well-defined and common behavior for setup and cleanup. You can also use these methods to create generic context managers that wrap other objects. Here's an example:

-
class Closer:
-    '''A context manager to automatically close an object with a close method
-    in a with statement.'''
-
-    def __init__(self, obj):
-        self.obj = obj
-
-    def __enter__(self):
-        return self.obj # bound to target
-
-    def __exit__(self, exception_type, exception_val, trace):
-        try:
-           self.obj.close()
-        except AttributeError: # obj isn't closable
-           print 'Not closable.'
-           return True # exception handled successfully
- - -

Here's an example of Closer in action, using an FTP connection to demonstrate it (a closable socket):

-
>>> from magicmethods import Closer
->>> from ftplib import FTP
->>> with Closer(FTP('ftp.somesite.com')) as conn:
-...     conn.dir()
-...
-# output omitted for brevity
->>> conn.dir()
-# long AttributeError message, can't use a connection that's closed
->>> with Closer(int(5)) as i:
-...     i += 1
-...
-Not closable.
->>> i
-6
- - -

See how our wrapper gracefully handled both proper and improper uses? That's the power of context managers and magic methods. Note that the Python standard library includes a module contextlib that contains a context manager, contextlib.closing(), that does approximately the same thing (without any handling of the case where an object does not have a close() method).

-

Abstract Base Classes

-

See http://docs.python.org/2/library/abc.html.

-

Building Descriptor Objects

-

Descriptors are classes which, when accessed through either getting, setting, or deleting, can also alter other objects. Descriptors aren't meant to stand alone; rather, they're meant to be held by an owner class. Descriptors can be useful when building object-oriented databases or classes that have attributes whose values are dependent on each other. Descriptors are particularly useful when representing attributes in several different units of measurement or representing computed attributes (like distance from the origin in a class to represent a point on a grid).

-

To be a descriptor, a class must have at least one of __get__, __set__, and __delete__ implemented. Let's take a look at those magic methods:

-
-
__get__(self, instance, owner)
-
Define behavior for when the descriptor's value is retrieved. instance is the instance of the owner object. owner is the owner class itself.
-
__set__(self, instance, value)
-
Define behavior for when the descriptor's value is changed. instance is the instance of the owner class and value is the value to set the descriptor to.
-
__delete__(self, instance)
-
Define behavior for when the descriptor's value is deleted. instance is the instance of the owner object.
-
-

Now, an example of a useful application of descriptors: unit conversions.

-
class Meter(object):
-    '''Descriptor for a meter.'''
-
-    def __init__(self, value=0.0):
-        self.value = float(value)
-    def __get__(self, instance, owner):
-        return self.value
-    def __set__(self, instance, value):
-        self.value = float(value)
-
-class Foot(object):
-    '''Descriptor for a foot.'''
-
-    def __get__(self, instance, owner):
-        return instance.meter * 3.2808
-    def __set__(self, instance, value):
-        instance.meter = float(value) / 3.2808
-
-class Distance(object):
-    '''Class to represent distance holding two descriptors for feet and
-    meters.'''
-    meter = Meter()
-    foot = Foot()
- - -

Copying

-

Sometimes, particularly when dealing with mutable objects, you want to be able to copy an object and make changes without affecting what you copied from. This is where Python's copy comes into play. However (fortunately), Python modules are not sentient, so we don't have to worry about a Linux-based robot uprising, but we do have to tell Python how to efficiently copy things.

-
-
__copy__(self)
-
Defines behavior for copy.copy() for instances of your class. copy.copy() returns a shallow copy of your object -- this means that, while the instance itself is a new instance, all of its data is referenced -- i.e., the object itself is copied, but its data is still referenced (and hence changes to data in a shallow copy may cause changes in the original).
-
__deepcopy__(self, memodict={})
-
Defines behavior for copy.deepcopy() for instances of your class. copy.deepcopy() returns a deep copy of your object -- the object and its data are both copied. memodict is a cache of previously copied objects -- this optimizes copying and prevents infinite recursion when copying recursive data structures. When you want to deep copy an individual attribute, call copy.deepcopy() on that attribute with memodict as the first argument.
-
-

What are some use cases for these magic methods? As always, in any case where you need more fine-grained control than what the default behavior gives you. For instance, if you are attempting to copy an object that stores a cache as a dictionary (which might be large), it might not make sense to copy the cache as well -- if the cache can be shared in memory between instances, then it should be.

-

Pickling Your Objects

-

If you spend time with other Pythonistas, chances are you've at least heard of pickling. Pickling is a serialization process for Python data structures, and can be incredibly useful when you need to store an object and retrieve it later (usually for caching). It's also a major source of worries and confusion.

-

Pickling is so important that it doesn't just have its own module (pickle), but its own protocol and the magic methods to go with it. But first, a brief word on how to pickle existing types(feel free to skip it if you already know).

-

Pickling: A Quick Soak in the Brine

-

Let's dive into pickling. Say you have a dictionary that you want to store and retrieve later. You couldwrite it's contents to a file, carefully making sure that you write correct syntax, then retrieve it using either exec() or processing the file input. But this is precarious at best: if you store important data in plain text, it could be corrupted or changed in any number of ways to make your program crash or worse run malicious code on your computer. Instead, we're going to pickle it:

-
import pickle
-
-data = {'foo': [1, 2, 3],
-        'bar': ('Hello', 'world!'),
-        'baz': True}
-jar = open('data.pkl', 'wb')
-pickle.dump(data, jar) # write the pickled data to the file jar
-jar.close()
- - -

Now, a few hours later, we want it back. All we have to do is unpickle it:

-
import pickle
-
-pkl_file = open('data.pkl', 'rb') # connect to the pickled data
-data = pickle.load(pkl_file) # load it into a variable
-print data
-pkl_file.close()
- - -

What happens? Exactly what you expect. It's just like we had data all along.

-

Now, for a word of caution: pickling is not perfect. Pickle files are easily corrupted on accident and on purpose. Pickling may be more secure than using flat text files, but it still can be used to run malicious code. It's also incompatible across different versions of Python, so don't expect to distribute pickled objects and expect people to be able to open them. However, it can also be a powerful tool for caching and other common serialization tasks.

-

Pickling your own Objects

-

Pickling isn't just for built-in types. It's for any class that follows the pickle protocol. The pickle protocol has four optional methods for Python objects to customize how they act (it's a bit different for C extensions, but that's not in our scope):

-
-
__getinitargs__(self)
-
If you'd like for __init__ to be called when your class is unpickled, you can define __getinitargs__, which should return a tuple of the arguments that you'd like to be passed to __init__. Note that this method will only work for old-style classes.
-
__getnewargs__(self)
-
For new-style classes, you can influence what arguments get passed to __new__ upon unpickling. This method should also return a tuple of arguments that will then be passed to __new__.
-
__getstate__(self)
-
Instead of the object's __dict__ attribute being stored, you can return a custom state to be stored when the object is pickled. That state will be used by __setstate__ when the object is unpickled.
-
__setstate__(self, state)
-
When the object is unpickled, if __setstate__ is defined the object's state will be passed to it instead of directly applied to the object's __dict__. This goes hand in hand with __getstate__: when both are defined, you can represent the object's pickled state however you want with whatever you want.
-
__reduce__(self)
-
When defining extension types (i.e., types implemented using Python's C API), you have to tell Python how to pickle them if you want them to pickle them. __reduce__() is called when an object defining it is pickled. It can either return a string representing a global name that Python will look up and pickle, or a tuple. The tuple contains between 2 and 5 elements: a callable object that is called to recreate the object, a tuple of arguments for that callable object, state to be passed to __setstate__ (optional), an iterator yielding list items to be pickled (optional), and an iterator yielding dictionary items to be pickled (optional).
-
__reduce_ex__(self)
-
__reduce_ex__ exists for compatibility. If it is defined, __reduce_ex__ will be called over __reduce__ on pickling. __reduce__ can be defined as well for older versions of the pickling API that did not support __reduce_ex__.
-
-

An Example

-

Our example is a Slate, which remembers what its values have been and when those values were written to it. However, this particular slate goes blank each time it is pickled: the current value will not be saved.

-
import time
-
-class Slate:
-    '''Class to store a string and a changelog, and forget its value when
-    pickled.'''
-
-    def __init__(self, value):
-        self.value = value
-        self.last_change = time.asctime()
-        self.history = {}
-
-    def change(self, new_value):
-        # Change the value. Commit last value to history
-        self.history[self.last_change] = self.value
-        self.value = new_value
-        self.last_change = time.asctime()
-
-    def print_changes(self):
-        print 'Changelog for Slate object:'
-        for k, v in self.history.items():
-            print '%s\t %s' % (k, v)
-
-    def __getstate__(self):
-        # Deliberately do not return self.value or self.last_change.
-        # We want to have a "blank slate" when we unpickle.
-        return self.history
-
-    def __setstate__(self, state):
-        # Make self.history = state and last_change and value undefined
-        self.history = state
-        self.value, self.last_change = None, None
- - -

Conclusion

-

The goal of this guide is to bring something to anyone that reads it, regardless of their experience with Python or object-oriented programming. If you're just getting started with Python, you've gained valuable knowledge of the basics of writing feature-rich, elegant, and easy-to-use classes. If you're an intermediate Python programmer, you've probably picked up some slick new concepts and strategies and some good ways to reduce the amount of code written by you and clients. If you're an expert Pythonista, you've been refreshed on some of the stuff you might have forgotten about and maybe picked up a few new tricks along the way. Whatever your experience level, I hope that this trip through Python's special methods has been truly magical. (I couldn't resist the final pun!)

Appendix 1: How to Call Magic Methods

-

Some of the magic methods in Python directly map to built-in functions; in this case, how to invoke them is fairly obvious. However, in other -cases, the invocation is far less obvious. This appendix is devoted to exposing non-obvious syntax that leads to magic methods getting called.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Magic MethodWhen it gets invoked (example)Explanation
__new__(cls [,...])instance = MyClass(arg1, arg2)__new__ is called on instance creation
__init__(self [,...])instance = MyClass(arg1, arg2)__init__ is called on instance creation
__cmp__(self, other)self == other, self > other, etc.Called for any comparison
__pos__(self)+selfUnary plus sign
__neg__(self)-selfUnary minus sign
__invert__(self)~selfBitwise inversion
__index__(self)x[self]Conversion when object is used as index
__nonzero__(self)bool(self)Boolean value of the object
__getattr__(self, name)self.name # name doesn't existAccessing nonexistent attribute
__setattr__(self, name, val)self.name = valAssigning to an attribute
__delattr__(self, name)del self.nameDeleting an attribute
__getattribute__(self, name)self.nameAccessing any attribute
__getitem__(self, key)self[key]Accessing an item using an index
__setitem__(self, key, val)self[key] = valAssigning to an item using an index
__delitem__(self, key)del self[key]Deleting an item using an index
__iter__(self)for x in selfIteration
__contains__(self, value)value in self, value not in selfMembership tests using in
__call__(self [,...])self(args)"Calling" an instance
__enter__(self)with self as x:with statement context managers
__exit__(self, exc, val, trace)with self as x:with statement context managers
__getstate__(self)pickle.dump(pkl_file, self)Pickling
__setstate__(self)data = pickle.load(pkl_file)Pickling
-

Hopefully, this table should have cleared up any questions you might have had about what syntax invokes which magic method.

-

Appendix 2: Changes in Python 3

-

Here, we document a few major places where Python 3 differs from 2.x in terms of its object model:

-
    -
  • Since the distinction between string and unicode has been done away with in Python 3, __unicode__ is gone and __bytes__ (which behaves similarly to __str__ and __unicode__ in 2.7) exists for a new built-in for constructing byte arrays.
  • -
  • Since division defaults to true division in Python 3, __div__ is gone in Python 3
  • -
  • __coerce__ is gone due to redundancy with other magic methods and confusing behavior
  • -
  • __cmp__ is gone due to redundancy with other magic methods
  • -
  • __nonzero__ has been renamed to __bool__
  • -
- - diff --git a/magicmethods.pdf b/magicmethods.pdf deleted file mode 100644 index 8e8410e996a918bf73efa1dc7f59f113a3dab54e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 203579 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⁡EEkPk@yY?pw7 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

!n1y!0mV_LFLh?jyHV087hq&7*2 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 KP*BTI8}NUI(+z(B diff --git a/magicmethods.py b/magicmethods.py deleted file mode 100755 index 9e2527c..0000000 --- a/magicmethods.py +++ /dev/null @@ -1,204 +0,0 @@ -""" -magicmethods.py -Want to try out the examples? Don't want to type them up yourself? Never worry, -magicmethods.py is a convenient Python module with all the class definitions -for the examples in the magic methods guide in it. -""" - -# FileObject class, demonstrating __init__ and __del__ -from os.path import join - -class FileObject: - """Wrapper for file objects to make sure the file gets closed on deletion.""" - - def __init__(self, filepath="~", filename="sample.txt"): - # open a file filename in filepath in read and write mode - self.file = open(join(filepath, filename), "r+") - - def __del__(self): - self.file.close() - del self.file - -# Word class, demonstrating __new__, comparisons -class Word(str): - """Class for words, defining comparison based on word length.""" - - def __new__(cls, word): - # Note that we have to use __new__. This is because str is an immutable - # type, so we have to initialize it early (at creation) - if " " in word: - print "Value contains spaces. Truncating to first space." - word = word[:word.index(" ")] # Word is now all chars before first space - return str.__new__(cls, word) - - def __gt__(self, other): - return len(self) > len(other) - def __lt__(self, other): - return len(self) < len(other) - def __ge__(self, other): - return len(self) >= len(other) - def __le__(self, other): - return len(self) <= len(other) - -# AccessCounter class, demonstrating __setattr__, __getattr__, and __delattr__ -class AccessCounter: - """A class that contains a value and implements an access counter. - The counter increments each time the value is changed.""" - - def __init__(self, val): - self.__dict__["counter"] = 0 - self.__dict__["value"] = val - - def __setattr__(self, name, value): - if name == "value": - self.__dict__["counter"] += 1 - self.__dict__["value"] = value - - def __delattr__(self, name): - if name == "value": - self.__dict__["counter"] += 1 - del self.__dict__["value"] - -# FunctionalList class, demonstrating __len__, __getitem__, __setitem__, __delitem__, -# __iter__, and __reversed__ -class FunctionalList: - """A class wrapping a list with some extra functional magic, like head, - tail, init, last, drop, and take.""" - - def __init__(self, values=None): - if values is None: - self.values = [] - else: - self.values = values - - def __len__(self): - return len(self.values) - - def __getitem__(self, key): - # if key is of invalid type or value, the list values will raise the error - return self.values[key] - - def __setitem__(self, key, value): - self.values[key] = value - - def __delitem__(self, key): - del self.values[key] - - def __iter__(self): - return iter(self.values) - - def __reversed__(self): - return reversed(self.values) - - def append(self, value): - self.values.append(value) - def head(self): - # get the first element - return self.values[0] - def tail(self): - # get all elements after the first - return self.values[1:] - def init(self): - # get elements up to the last - return self.values[:-1] - def last(self): - # get last element - return self.values[-1] - def drop(self, n): - # get all elements except first n - return self.values[n:] - def take(self, n): - # get first n elements - return self.values[:n] - -# Entity class demonstrating __call__ -class Entity: - """Class to represent an entity. Callable to update the entity"s position.""" - - def __init__(self, size, x, y): - self.x, self.y = x, y - self.size = size - - def __call__(self, x, y): - """Change the position of the entity.""" - self.x, self.y = x, y - - # snip... - -# Wrapper class to close an object in a with statement -class Closer: - """A context manager to automatically close an object with a close method - in a with statement.""" - - def __init__(self, obj): - self.obj = obj - - def __enter__(self): - return self.obj # bound to target - - def __exit__(self, exception_type, exception_val, trace): - try: - self.obj.close() - except AttributeError: # obj isn"t closable - print "Not closable." - return True # exception handled successfully - -# Classes to represent descriptors and their use -class Meter(object): - """Descriptor for a meter.""" - - def __init__(self, value=0.0): - self.value = float(value) - def __get__(self, instance, owner): - return self.value - def __set__(self, instance, value): - self.value = float(value) - -class Foot(object): - """Descriptor for a foot.""" - - def __get__(self, instance, owner): - return instance.meter * 3.2808 - def __set__(self, instance, value): - instance.meter = float(value) / 3.2808 - -class Distance(object): - """Class to represent distance holding two descriptors for feet and - meters.""" - meter = Meter() - foot = Foot() - -# Class to demo fine-tuning pickling -import time - -class Slate: - """Class to store a string and a changelog, and forget its value when - pickled.""" - - def __init__(self, value): - self.value = value - self.last_change = time.asctime() - self.history = {} - - def change(self, new_value): - # Change the value. Commit last value to history - self.history[self.last_change] = self.value - self.value = new_value - self.last_change = time.asctime() - - def print_changes(self): - print "Changelog for Slate object:" - for k, v in self.history.items(): - print "%s\t %s" % (k, v) - - def __getstate__(self): - # Deliberately do not return self.value or self.last_change. - # We want to have a "blank slate" when we unpickle. - return self.history - - def __setstate__(self, state): - # Make self.history = state and last_change and value undefined - self.history = state - self.value, self.last_change = None, None - - diff --git a/magicmethods.tex b/magicmethods.tex deleted file mode 100755 index 5f4d241..0000000 --- a/magicmethods.tex +++ /dev/null @@ -1,659 +0,0 @@ -\documentclass[a4paper,11pt]{article} - -\title{A Guide to Python's Magic Methods} -\author{Rafe Kettler} -\date{\today} - -\usepackage{fullpage} -\usepackage{underscore} -\usepackage{listings} -\lstloadlanguages{Python} -\lstset{ -language = Python, -basicstyle = \ttfamily\footnotesize, -keepspaces = true, -showstringspaces = false -} - -\newcommand{\code}[1]{\texttt{#1}} - -\begin{document} -\maketitle - -\section{Introduction} - -This guide is the culmination of a few months' worth of blog posts. The subject is \textbf{magic methods}. - -What are magic methods? They're everything in object-oriented Python. They're special methods that you can define to add "magic" to your classes. They're always surrounded by double underscores (e.g. \code{__init__} or \code{__lt__}). They're also not as well documented as they need to be. All of the magic methods for Python appear in the same section in the Python docs, but they're scattered about and only loosely organized. There's hardly an example to be found in that section (and that may very well be by design, since they're all detailed in the \emph{language reference}, along with boring syntax descriptions, etc.). - -So, to fix what I perceived as a flaw in Python's documentation, I set out to provide some more plain-English, example-driven documentation for Python's magic methods. I started out with weekly blog posts, and now that I've finished with those, I've put together this guide. - -I hope you enjoy it. Use it as a tutorial, a refresher, or a reference; it's just intended to be a user-friendly guide to Python's magic methods. - -\section{Construction and Initialization} - -Everyone knows the most basic magic method, \code{__init__}. It's the way that we can define the initialization behavior of an object. However, when I call \code{x = SomeClass()}, \code{__init__} is not the first thing to get called. Actually, it's a method called \code{__new__}, which actually creates the instance, then passes any arguments at creation on to the initializer. At the other end of the object's lifespan, there's \code{__del__}. Let's take a closer look at these 3 magic methods: - -\begin{description} - -\item[\code{__new__(cls, [...)}] -\code{__new__} is the first method to get called in an object's instantiation. It takes the class, then any other arguments that it will pass along to \code{__init__}. \code{__new__} is used fairly rarely, but it does have its purposes, particularly when subclassing an immutable type like a tuple or a string. I don't want to go in to too much detail on \code{__new__} because it's not too useful, but it is covered in great detail in the Python docs. -\item[\code{__init__(self, [...)}] -The initializer for the class. It gets passed whatever the primary constructor was called with (so, for example, if we called \code{x = SomeClass(10, 'foo')}, \code{__init__} would get passed \code{10} and \code{'foo'} as arguments. \code{__init__} is almost universally used in Python class definitions. -\item[\code{__del__(self)}] -If \code{__new__} and \code{__init__} formed the constructor of the object, \code{__del__} is the destructor. It doesn't implement behavior for the statement \code{del x} (so that code would not translate to \code{x.__del__()}). Rather, it defines behavior for when an object is garbage collected. It can be quite useful for objects that might require extra cleanup upon deletion, like sockets or file objects. Be careful, however, as there is no guarantee that \code{__del__} will be executed if the object is still alive when the interpreter exits, so \code{__del__} can't serve as a replacement for good coding practices (like always closing a connection when you're done with it). In fact, \code{__del__} should almost never be used because of the precarious circumstances under which it is called; use it with caution! - -\end{description} - -\noindent -Putting it all together, here's an example of \code{__init__} and \code{__del__} in action: - -\lstinputlisting{listings/fileobject.py} - -\section{Making Operators Work on Custom Classes} - -One of the biggest advantages of using Python's magic methods is that they provide a simple way to make objects behave like built-in types. That means you can avoid ugly, counter-intuitive, and nonstandard ways of performing basic operators. In some languages, it's common to do something like this: - -\begin{lstlisting} -if instance.equals(other_instance): - # do something -\end{lstlisting} - -\noindent -You could certainly do this in Python, too, but this adds confusion and is unnecessarily verbose. Different libraries might use different names for the same operations, making the client do way more work than necessary. With the power of magic methods, however, we can define one method (\code{__eq__}, in this case), and say what we \emph{mean} instead: - -\begin{lstlisting} -if instance == other_instance: - #do something -\end{lstlisting} - -\noindent -That's part of the power of magic methods. The vast majority of them allow us to define meaning for operators so that we can use them on our own classes just like they were built in types. - -\subsection{Comparison magic methods} - -Python has a whole slew of magic methods designed to implement intuitive comparisons between objects using operators, not awkward method calls. They also provide a way to override the default Python behavior for comparisons of objects (by reference). Here's the list of those methods and what they do: - -\begin{description} - -\item[\code{__cmp__(self, other)}] -: \code{__cmp__} is the most basic of the comparison magic methods. It actually implements behavior for all of the comparison operators (<, ==, !=, etc.), but it might not do it the way you want (for example, if whether one instance was equal to another were determined by one criterion and and whether an instance is greater than another were determined by something else). \code{__cmp__} should return a negative integer if \code{self < other}, zero if \code{self == other}, and positive if \code{self > other}. It's usually best to define each comparison you need rather than define them all at once, but \code{__cmp__} can be a good way to save repetition and improve clarity when you need all comparisons implemented with similar criteria. - -\item[\code{__eq__(self, other)}] -Defines behavior for the equality operator, \code{==}. -\item[\code{__ne__(self, other)}] -Defines behavior for the inequality operator, \code{!=}. -\item[\code{__lt__(self, other)}] -Defines behavior for the less-than operator, \code{<}. -\item[\code{__gt__(self, other)}] -Defines behavior for the greater-than operator, \code{>}. -\item[\code{__le__(self, other)}] -Defines behavior for the less-than-or-equal-to operator, \code{<=}. -\item[\code{__ge__(self, other)}] -Defines behavior for the greater-than-or-equal-to operator, \code{>=}. - -\end{description} - -For an example, consider a class to model a word. We might want to compare words lexicographically (by the alphabet), which is the default comparison behavior for strings, but we also might want to do it based on some other criterion, like length or number of syllables. In this example, we'll compare by length. Here's an implementation: - -\lstinputlisting{listings/word.py} - -Now, we can create two \code{Word}s (by using \code{Word('foo')} and \code{Word('bar')}) and compare them based on length. Note, however, that we didn't define \code{__eq__} and \code{__ne__}. This is because this would lead to some weird behavior (notably that \code{Word('foo') == Word('bar')} would evaluate to true). It wouldn't make sense to test for equality based on length, so we fall back on \code{str}'s implementation of equality. - -Now would be a good time to note that you don't have to define every comparison magic method to get rich comparisons. The standard library has kindly provided us with a class decorator in the module \code{functools} that will define all rich comparison methods if you only define \code{__eq__} and one other (e.g. \code{__gt__}, \code{__lt__}, etc.) This feature is only available in Python 2.7, but when you get a chance it saves a great deal of time and effort. You can use it by placing \code{@total_ordering} above your class definition. - -\subsection{Numeric Magic Methods} - -Just like you can create ways for instances of your class to be compared with comparison operators, you can define behavior for numeric operators. Buckle your seat belts, folks, there's a lot of these. For organization's sake, I've split the numeric magic methods into 5 categories: unary operators, normal arithmetic operators, reflected arithmetic operators (more on this later), augmented assignment, and type conversions. - -\subsubsection{Unary operators and functions} - -Unary operators and functions only have one operand, e.g. negation, absolute value, etc. - -\begin{description} - -\item[\code{__pos__(self)}] -Implements behavior for unary positive (e.g. \code{+some_object}) -\item[\code{__neg__(self)}] -Implements behavior for negation (e.g. \code{-some_object}) -\item[\code{__abs__(self)}] -Implements behavior for the built in \code{abs()} function. -\item[\code{__invert__(self)}] -Implements behavior for inversion using the \code{\char126} operator. -\item[\code{__round__(self, n)}] -Implements behavior for the buil in \code{round()} function. \code{n} is the number of decimal places to round to. -\item[\code{__floor__(self)}] -: Implements behavior for \code{math.floor()}, i.e., rounding down to the nearest integer. -\item[\code{__ceil__(self)}] -: Implements behavior for \code{math.ceil()}, i.e., rounding up to the nearest integer. -\item[\code{__trunc__(self)}] -: Implements behavior for \code{math.trunc()}, i.e., truncating to an integral. - -\end{description} - -\subsubsection{Normal arithmetic operators} - -Now, we cover the typical binary operators (and a function or two): +, -, * and the like. These are, for the most part, pretty self-explanatory. - -\begin{description} - -\item[\code{__add__(self, other)}] -Implements addition. -\item[\code{__sub__(self, other)}] -Implements subtraction. -\item[\code{__mul__(self, other)}] -Implements multiplication. -\item[\code{__floordiv__(self, other)}] -Implements integer division using the \code{//} operator. -\item[\code{__div__(self, other)}] -Implements division using the \code{/} operator. -\item[\code{__truediv__(self, other)}] -Implements _true_ division. Note that this only works when \code{from __future__ import division} is in effect. -\item[\code{__mod__(self, other)}] -Implements modulo using the \code{\%} operator. -\item[\code{__divmod__(self, other)}] -Implements behavior for long division using the \code{divmod()} built in function. -\item[\code{__pow__}] -Implements behavior for exponents using the \code{**} operator. -\item[\code{__lshift__(self, other)}] -Implements left bitwise shift using the \code{<<} operator. -\item[\code{__rshift__(self, other)}] -Implements right bitwise shift using the \code{>>} operator. -\item[\code{__and__(self, other)}] -Implements bitwise and using the \code{\&} operator. -\item[\code{__or__(self, other)}] -Implements bitwise or using the \code{|} operator. -\item[\code{__xor__(self, other)}] -Implements bitwise xor using the \code{\char94} operator. - -\end{description} - -\subsubsection{Reflected arithmetic operators} - -You know how I said I would get to reflected arithmetic in a bit? Some of you might think it's some big, scary, foreign concept. It's actually quite simple. Here's an example: - -\begin{lstlisting} -some_object + other -\end{lstlisting} - -\noindent -That was "normal" addition. The reflected equivalent is the same thing, except with the operands switched around: - -\begin{lstlisting} -other + some_object -\end{lstlisting} - -\noindent -So, all of these magic methods do the same thing as their normal equivalents, except the perform the operation with other as the first operand and self as the second, rather than the other way around. In most cases, the result of a reflected operation is the same as its normal equivalent, so you may just end up defining \code{__radd__} as calling \code{__add__} and so on. Note that the object on the left hand side of the operator (\code{other} in the example) must not define (or return \code{NotImplemented}) for its definition of the non-reflected version of an operation. For instance, in the example, \code{some_object.__radd__} will only be called if `other` does not define \code{__add__}. - -\begin{description} - -\item[\code{__radd__(self, other)}] -Implements reflected addition. -\item[\code{__rsub__(self, other)}] -Implements reflected subtraction. -\item[\code{__rmul__(self, other)}] -Implements reflected multiplication. -\item[\code{__rfloordiv__(self, other)}] -Implements reflected integer division using the \code{//} operator. -\item[\code{__rdiv__(self, other)}] -Implements reflected division using the \code{/} operator. -\item[\code{__rtruediv__(self, other)}] -Implements reflected _true_ division. Note that this only works when \code{from __future__ import division} is in effect. -\item[\code{__rmod__(self, other)}] -Implements reflected modulo using the \code{\%} operator. -\item[\code{__rdivmod__(self, other)}] -Implements behavior for long division using the \code{divmod()} built in function, when \code{divmod(other, self)} is called. -\item[\code{__rpow__}] -Implements behavior for reflected exponents using the \code{**} operator. -\item[\code{__rlshift__(self, other)}] -Implements reflected left bitwise shift using the \code{<<} operator. -\item[\code{__rrshift__(self, other)}] -Implements reflected right bitwise shift using the \code{>>} operator. -\item[\code{__rand__(self, other)}] -Implements reflected bitwise and using the \code{\&} operator. -\item[\code{__ror__(self, other)}] -Implements reflected bitwise or using the \code{|} operator. -\item[\code{__rxor__(self, other)}] -Implements reflected bitwise xor using the \code{\char94} operator. - -\end{description} - -\subsubsection{Augmented assignment} - -Python also has a wide variety of magic methods to allow custom behavior to be defined for augmented assignment. You're probably already familiar with augmented assignment, it combines ``normal'' operators with assignment. If you still don't know what I'm talking about, here's an example: - -\begin{lstlisting} -x = 5 -x += 1 # in other words x = x + 1 -\end{lstlisting} - -Each of these methods should return the value that the variable on the left hand side should be assigned to (for instance, for \code{a += b}, \code{__iadd__} might return \code{a + b}, which would be assigned to \code{a}). Here's the list: - -\begin{description} - -\item[\code{__iadd__(self, other)}] -Implements addition with assignment. -\item[\code{__isub__(self, other)}] -Implements subtraction with assignment. -\item[\code{__imul__(self, other)}] -Implements multiplication with assignment. -\item[\code{__ifloordiv__(self, other)}] -Implements integer division with assignment using the \code{//=} operator. -\item[\code{__idiv__(self, other)}] -Implements division with assignment using the \code{/=} operator. -\item[\code{__itruediv__(self, other)}] -Implements _true_ division with assignment. Note that this only works when \code{from __future__ import division} is in effect. -\item[\code{__imod__(self, other)}] -Implements modulo with assignment using the \code{\%=} operator. -\item[\code{__ipow__}] -Implements behavior for exponents with assignment using the \code{**=} operator. -\item[\code{__ilshift__(self, other)}] -Implements left bitwise shift with assignment using the \code{<<=} operator. -\item[\code{__irshift__(self, other)}] -Implements right bitwise shift with assignment using the \code{>>=} operator. -\item[\code{__iand__(self, other)}] -Implements bitwise and with assignment using the \code{\&=} operator. -\item[\code{__ior__(self, other)}] -Implements bitwise or with assignment using the \code{|=} operator. -\item[\code{__ixor__(self, other)}] -Implements bitwise xor with assignment using the \code{\char94=} operator. - -\end{description} - -\subsubsection{Type conversion magic methods} - -Python also has an array of magic methods designed to implement behavior for built in type conversion functions like \code{float()}. Here they are: - -\begin{description} - -\item[\code{__int__(self)}] -Implements type conversion to int. -\item[\code{__long__(self)}] -Implements type conversion to long. -\item[\code{__float__(self)}] -Implements type conversion to float. -\item[\code{__complex__(self)}] -Implements type conversion to complex. -\item[\code{__oct__(self)}] -Implements type conversion to octal. -\item[\code{__hex__(self)}] -Implements type conversion to hexadecimal. -\item[\code{__index__(self)}] -Implements type conversion to an int when the object is used in a slice expression. If you define a custom numeric type that might be used in slicing, you should define \code{__index__}. -\item[\code{__trunc__(self)}] -Called when \code{math.trunc(self)} is called. \code{__trunc__} should return the value of \code{self} truncated to an integral type (usually a long). -\item[\code{__coerce__(self, other)}] -Method to implement mixed mode arithmetic. \code{__coerce__} should return \code{None} if type conversion is impossible. Otherwise, it should return a pair (2-tuple) of \code{self} and \code{other}, manipulated to have the same type. - -\end{description} - -\section{Representing your Classes} - -It's often useful to have a string representation of a class. In Python, there's a few methods that you can implement in your class definition to customize how built in functions that return representations of your class behave. - -\begin{description} - -\item[\code{__str__(self)}] -Defines behavior for when \code{str()} is called on an instance of your class. -\item[\code{__repr__(self)}] -Defines behavior for when \code{repr()} is called on an instance of your class. The major difference between \code{str()} and \code{repr()} is intended audience. \code{repr()} is intended to produce output that is mostly machine-readable (in many cases, it could be valid Python code even), whereas \code{str()} is intended to be human-readable. -\item[\code{__unicode__(self)}] -Defines behavior for when \code{unicode()} is called on an instance of your class. \code{unicode()} is like \code{str()}, but it returns a unicode string. Be wary: if a client calls \code{str()} on an instance of your class and you've only defined \code{__unicode__()}, it won't work. You should always try to define \code{__str__()} as well in case someone doesn't have the luxury of using unicode. -\item[\code{__format__(self, formatstr)}] -Defines behavior for when an instance of your class is used in new-style string formatting. For instance, \code{"Hello, {0:abc}!".format(a)} would lead to the call \code{a.__format__("abc")}. This can be useful for defining your own numerical or string types that you might like to give special formatting options. -\item[\code{__hash__(self)}] -Defines behavior for when \code{hash()} is called on an instance of your class. It has to return an integer, and its result is used for quick key comparison in dictionaries. Note that this usually entails implementing \code{__eq__} as well. Live by the following rule: \code{a == b} implies \code{hash(a) == hash(b)}. -\item[\code{__nonzero__(self)}] -Defines behavior for when \code{bool()} is called on an instance of your class. Should return True or False, depending on whether you would want to consider the instance to be True or False. -\item[\code{__dir__(self)}] -: Defines behavior for when \code{dir()} is called on an instance of your class. This method should return a list of attributes for the user. Typically, implementing \code{__dir__} is unnecessary, but it can be vitally important for interactive use of your classes if you redefine \code{__getattr__} or \code{__getattribute__} (which you will see in the next section) or are otherwise dynamically generating attributes. - -\end{description} - -\noindent -We're pretty much done with the boring (and example-free) part of the magic methods guide. Now that we've covered some of the more basic magic methods, it's time to move to more advanced material. - -\section{Controlling Attribute Access} - -Many people coming to Python from other languages complain that it lacks true encapsulation for classes (e.g. no way to define private attributes and then have public getter and setters). This couldn't be farther than the truth: it just happens that Python accomplishes a great deal of encapsulation through ``magic'', instead of explicit modifiers for methods or fields. Take a look: - -\begin{description} - -\item[\code{__getattr__(self, name)}] -You can define behavior for when a user attempts to access an attribute that doesn't exist (either at all or yet). This can be useful for catching and redirecting common misspellings, giving warnings about using deprecated attributes (you can still choose to compute and return that attribute, if you wish), or deftly handing an \code{AttributeError}. It only gets called when a nonexistent attribute is accessed, however, so it isn't a true encapsulation solution. - -\item[\code{__setattr__(self, name, value)}] -Unlike \code{__getattr__}, \code{__setattr__} is an encapsulation solution. It allows you to define behavior for assignment to an attribute regardless of whether or not that attribute exists, meaning you can define custom rules for any changes in the values of attributes. However, you have to be careful with how you use \code{__setattr__}, as the example at the end of the list will show. - -\item[\code{__delattr__(self, name)}] -This is the exact same as \code{__setattr__}, but for deleting attributes instead of setting them. The same precautions need to be taken as with \code{__setattr__} as well in order to prevent infinite recursion (calling \code{del self.name} in the implementation of \code{__delattr__} would cause infinite recursion). - -\item[\code{__getattribute__(self, name)}] -After all this, \code{__getattribute__} fits in pretty well with its companions \code{__setattr__} and \code{__delattr__}. However, I don't recommend you use it. \code{__getattribute__} can only be used with new-style classes (all classes are new-style in the newest versions of Python, and in older versions you can make a class new-style by subclassing \code{object}. It allows you to define rules for whenever an attribute's value is accessed. It suffers from some similar infinite recursion problems as its partners-in-crime (this time you call the base class's \code{__getattribute__} method to prevent this). It also mainly obviates the need for \code{__getattr__}, which, when \code{__getattribute__} is implemented, only gets called if it is called explicitly or an \code{AttributeError} is raised. This method can be used (after all, it's your choice), but I don't recommend it because it has a small use case (it's far more rare that we need special behavior to retrieve a value than to assign to it) and because it can be really difficult to implement bug-free. - -\end{description} - -You can easily cause a problem in your definitions of any of the methods controlling attribute access. Consider this example: - -\begin{lstlisting} -def __setattr__(self, name, value): - self.name = value - # since every time an attribute is assigned, __setattr__() - # is called, this is recursion. So this really means - # self.__setattr__('name', value). Since the method keeps - # calling itself, the recursion goes on forever causing a crash - -def __setattr__(self, name, value): - self.__dict__[name] = value # assigning to the dict of names in the class - # define custom behavior here -\end{lstlisting} - -Again, Python's magic methods are incredibly powerful, and with great power comes great responsibility. It's important to know the proper way to use magic methods so you don't break any code. - -So, what have we learned about custom attribute access in Python? It's not to be used lightly. In fact, it tends to be excessively powerful and counter-intuitive. But the reason why it exists is to scratch a certain itch: Python doesn't seek to make bad things impossible, but just to make them difficult. Freedom is paramount, so you can really do whatever you want. Here's an example of some of the special attribute access methods in action (note that we use \code{super} because not all classes have an attribute \code{__dict__}): - -\lstinputlisting{listings/access.py} - -\section{Making Custom Sequences} - -There's a number of ways to get your Python classes to act like built in sequences (dict, tuple, list, string, etc.). These are by far my favorite magic methods in Python because of the absurd degree of control they give you and the way that they magically make a whole array of global functions work beautifully on instances of your class. But before we get down to the good stuff, a quick word on requirements. - -\subsection{Requirements} - -Now that we're talking about creating your own sequences in Python, it's time to talk about _protocols_. Protocols are somewhat similar to interfaces in other languages in that they give you a set of methods you must define. However, in Python protocols are totally informal and require no explicit declarations to implement. Rather, they're more like guidelines. - -Why are we talking about protocols now? Because implementing custom container types in Python involves using some of these protocols. First, there's the protocol for defining immutable containers: to make an immutable container, you need only define \code{__len__} and \code{__getitem__} (more on these later). The mutable container protocol requires everything that immutable containers require plus \code{__setitem__} and \code{__delitem__}. Lastly, if you want your object to be iterable, you'll have to define \code{__iter__}, which returns an iterator. That iterator must conform to an iterator protocol, which requires iterators to have methods called \code{__iter__}(returning itself) and \code{next}. - - -\subsection{The magic behind containers} -\begin{description} - -\item[\code{__len__(self)}] -Returns the length of the container. Part of the protocol for both immutable and mutable containers. -\item[\code{__getitem__(self, key)}] -Defines behavior for when an item is accessed, using the notation \code{self[key]}. This is also part of both the mutable and immutable container protocols. It should also raise appropriate exceptions: \code{TypeError} if the type of the key is wrong and \code{KeyError} if there is no corresponding value for the key. -\item[\code{__setitem__(self, key, value)}] -Defines behavior for when an item is assigned to, using the notation \code{self[key] = value}. This is part of the mutable container protocol. Again, you should raise \code{KeyError} and \code{TypeError} where appropriate. -\item[\code{__delitem__(self, key)}] -Defines behavior for when an item is deleted (e.g. \code{del self[key]}). This is only part of the mutable container protocol. You must raise the appropriate exceptions when an invalid key is used. -\item[\code{__iter__(self)}] -Should return an iterator for the container. Iterators are returned in a number of contexts, most notably by the \code{iter()} built in function and when a container is looped over using the form \code{for x in container:}. Iterators are their own objects, and they also must define an \code{__iter__} method that returns \code{self}. -\item[\code{__reversed__(self)}] -Called to implement behavior for the \code{reversed()} built in function. Should return a reversed version of the sequence. Implement this only if the sequence class is ordered, like list or tuple. -\item[\code{__contains__(self, item)}] -\code{__contains__} defines behavior for membership tests using \code{in} and \code{not in}. Why isn't this part of a sequence protocol, you ask? Because when \code{__contains__} isn't defined, Python just iterates over the sequence and returns \code{True} if it comes across the item it's looking for. -\item[\code{__missing__(self, key)}] -\code{__missing__} is used in subclasses of \code{dict}. It defines behavior for whenever a key is accessed that does not exist in a dictionary (so, for instance, if I had a dictionary \code{d} and said \code{d["george"]} when \code{"george"} is not a key in the dict, \code{d.__missing__("george")} would be called). - -\end{description} - -\subsection{An example} - - -For our example, let's look at a list that implements some functional constructs that you might be used to from other languages (Haskell, for example): - -\lstinputlisting{listings/list.py} - -\noindent -There you have it, a (marginally) useful example of how to implement your own sequence. Of course, there are more useful applications of custom sequences, but quite a few of them are already implemented in the standard library (batteries included, right?), like \code{Counter}, \code{OrderedDict}, and \code{NamedTuple}. - -\section{Reflection} - -You can also control how reflection works using the built in functions \code{isinstance} and \code{issubclass()} behaves by defining magic methods. The magic methods are: - -\begin{description} - -\item[\code{__instancecheck__(self, instance)}] -Checks if an instance is an instance of the class you defined (e.g. \code{isinstance(instance, class)}. -\item[\code{__subclasscheck__(self, subclass)}] -Checks if a class subclasses the class you defined (e.g. \code{issubclass(subclass, class)}). - -\end{description} - -The use case for these magic methods might seem small, and that may very well be true. I won't spend too much more time on reflection magic methods because they aren't very important, but they reflect something important about object-oriented programming in Python and Python in general: there is almost always an easy way to do something, even if it's rarely necessary. These magic methods might not seem useful, but if you ever need them you'll be glad that they're there (and that you read this guide!). - -\section{Abstract Base Classes} - -See http://docs.python.org/2/library/abc.html. - -\section{Callable Objects} - -As you may already know, in Python, functions are first-class objects. This means that they can be passed to functions and methods just as if they were objects of any other kind. This is an incredibly powerful feature. - -A special magic method in Python allows instances of your classes to behave as if they were functions, so that you can ``call'' them, pass them to functions that take functions as arguments, and so on. This is another powerful convenience feature that makes programming in Python that much sweeter. - -\begin{description} - -\item[\code{__call__(self, [args...])}] -Allows an instance of a class to be called as a function. Essentially, this means that \code{x()} is the same as \code{x.__call__()}. Note that \code{__call__} takes a variable number of arguments; this means that you define \code{__call__} as you would any other function, taking however many arguments you'd like it to. - -\end{description} - -\code{__call__} can be particularly useful in classes with instances that need to often change state. ``Calling'' the instance can be an intuitive and elegant way to change the object's state. An example might be a class representing an entity's position on a plane: - -\lstinputlisting{listings/call.py} - -\section{Context Managers} - -In Python 2.5, a new keyword was introduced in Python along with a new method for code reuse, the \code{with} statement. The concept of context managers was hardly new in Python (it was implemented before as a part of the library), but not until PEP 343 was accepted did it achieve status as a first class language construct. You may have seen with statements before: - -\begin{lstlisting} -with open('foo.txt') as bar: - # perform some action with bar -\end{lstlisting} - -Context managers allow setup and cleanup actions to be taken for objects when their creation is wrapped with a \code{with} statement. The behavior of the context manager is determined by two magic methods: - -\begin{description} - -\item[\code{__enter__(self)}] -Defines what the context manager should do at the beginning of the block created by the \code{with} statement. Note that the return value of \code{__enter__} is bound to the \emph{target} of the \code{with} statement, or the name after the \code{as}. -\item[\code{__exit__(self, exception_type, exception_value, traceback)}] -Defines what the context manager should do after its block has been executed (or terminates). It can be used to handle exceptions, perform cleanup, or do something always done immediately after the action in the block. If the block executes successfully, \code{exception_type}, \code{exception_value}, and \code{traceback} will be \code{None}. Otherwise, you can choose to handle the exception or let the user handle it; if you want to handle it, make sure \code{__exit__} returns \code{True} after all is said and done. If you don't want the exception to be handled by the context manager, just let it happen. - -\end{description} - -\code{__enter__} and \code{__exit__} can be useful for specific classes that have well-defined and common behavior for setup and cleanup. You can also use these methods to create generic context managers that wrap other objects. Here's an example: - -\lstinputlisting{listings/closer.py} - -\noindent -Here's an example of \code{Closer} in action, using an FTP connection to demonstrate it (a closable socket): - -\begin{lstlisting} ->>> from magicmethods import Closer ->>> from ftplib import FTP ->>> with Closer(FTP('ftp.somesite.com')) as conn: -... conn.dir() -... -# output omitted for brevity ->>> conn.dir() -# long AttributeError message, can't use a connection that's closed ->>> with Closer(int(5)) as i: -... i += 1 -... -Not closable. ->>> i -6 -\end{lstlisting} - -\noindent -See how our wrapper gracefully handled both proper and improper uses? That's the power of context managers and magic methods. Note that the Python standard library includes a module \code{contextlib} that contains a context manager, \code{contextlib.closing()}, that does approximately the same thing (without any handling of the case where an object does not have a \code{close()} method). - -\section{Building Descriptor Objects} - -Descriptors are classes which, when accessed through either getting, setting, or deleting, can also alter other objects. Descriptors aren't meant to stand alone; rather, they're meant to be held by an owner class. Descriptors can be useful when building object-oriented databases or classes that have attributes whose values are dependent on each other. Descriptors are particularly useful when representing attributes in several different units of measurement or representing computed attributes (like distance from the origin in a class to represent a point on a grid). - -To be a descriptor, a class must have at least one of \code{__get__}, \code{__set__}, and \code{__delete__} implemented. - -Let's take a look at those magic methods: - -\begin{description} - -\item[\code{__get__(self, instance, owner)}] -Define behavior for when the descriptor's value is retrieved. \code{instance} is the instance of the owner object. \code{owner} is the owner class itself. - -\item[\code{__set__(self, instance, value)}] -Define behavior for when the descriptor's value is changed. \code{instance} is the instance of the owner class and \code{value} is the value to set the descriptor to. - -\item[\code{__delete__(self, instance)}] -Define behavior for when the descriptor's value is deleted. \code{instance} is the instance of the owner object. - -\end{description} - -\noindent -Now, an example of a useful application of descriptors: unit conversions. - -\lstinputlisting{listings/descriptor.py} - -\section{Copying} - -Sometimes, particularly when dealing with mutable objects, you want to be able to copy an object and make changes without affecting what you copied from. This is where Python's \code{copy} comes into play. However (fortunately), Python modules are not sentient, so we don't have to worry about a Linux-based robot uprising, but we do have to tell Python how to efficiently copy things. - -\code{__copy__(self)} -: Defines behavior for \code{copy.copy()} for instances of your class. \code{copy.copy()} returns a _shallow copy_ of your object -- this means that, while the instance itself is a new instance, all of its data is referenced -- i.e., the object itself is copied, but its data is still referenced (and hence changes to data in a shallow copy may cause changes in the original). - -\code{__deepcopy__(self, memodict={})} -: Defines behavior for \code{copy.deepcopy()} for instances of your class. \code{copy.deepcopy()} returns a _deep copy_ of your object -- the object _and_ its data are both copied. \code{memodict} is a cache of previously copied objects -- this optimizes copying and prevents infinite recursion when copying recursive data structures. When you want to deep copy an individual attribute, call \code{copy.deepcopy()} on that attribute with \code{memodict} as the first argument. - -What are some use cases for these magic methods? As always, in any case where you need more fine-grained control than what the default behavior gives you. For instance, if you are attempting to copy an object that stores a cache as a dictionary (which might be large), it might not make sense to copy the cache as well -- if the cache can be shared in memory between instances, then it should be. - -\section{Pickling} - -If you spend time with other Pythonistas, chances are you've at least heard of pickling. Pickling is a serialization process for Python data structures, and can be incredibly useful when you need to store an object and retrieve it later. It's also a major source of worries and confusion. - -Pickling is so important that it doesn't just have its own module (\code{pickle}), but its own \emph{protocol} and the magic methods to go with it. But first, a brief word on how to pickle existing types(feel free to skip it if you already know). - -\subsection{Pickling: A Quick Soak in the Brine} - -Let's dive into pickling. Say you have a dictionary that you want to store and retrieve later. You could write it's contents to a file, carefully making sure that you write correct syntax, then retrieve it using either \code{exec()} or processing the file input. But this is precarious at best: if you store important data in plain text, it could be corrupted or changed in any number of ways to make your program crash or worse run malicious code on your computer. Instead, we're going to pickle it: - -\begin{lstlisting} -import pickle - -data = {'foo': [1, 2, 3], - 'bar': ('Hello', 'world!'), - 'baz': True} -jar = open('data.pkl', 'wb') -pickle.dump(data, jar) # write the pickled data to the file jar -jar.close() -\end{lstlisting} - -\noindent -Now, a few hours later, we want it back. All we have to do is unpickle it: - -\begin{lstlisting} -import pickle - -pkl_file = open('data.pkl', 'rb') # connect to the pickled data -data = pickle.load(pkl_file) # load it into a variable -print data -pkl_file.close() -\end{lstlisting} - -\noindent -What happens? Exactly what you expect. It's just like we had \code{data} all along. - -Now, for a word of caution: pickling is not perfect. Pickle files are easily corrupted on accident and on purpose. Pickling may be more secure than using flat text files, but it still can be used to run malicious code. It's also incompatible across versions of Python, so don't expect to distribute pickled objects and expect people to be able to open them. However, it can also be a powerful tool for caching and other common serialization tasks. - -\subsection{Pickling your own Objects} - -Pickling isn't just for built-in types. It's for any class that follows the pickle protocol. The pickle protocol has four optional methods for Python objects to customize how they act (it's a bit different for C extensions, but that's not in our scope): - -\begin{description} - -\item[\code{__getinitargs__(self)}] -If you'd like for \code{__init__} to be called when your class is unpickled, you can define \code{__getinitargs__}, which should return a tuple of the arguments that you'd like to be passed to \code{__init__}. Note that this method will only work for old-style classes. -\item[\code{__getnewargs__(self)}] -For new-style classes, you can influence what arguments get passed to \code{__new__} upon unpickling. This method should also return a tuple of arguments that will then be passed to \code{__new__}. -\item[\code{__getstate__(self)}] -Instead of the object's \code{__dict__} attribute being stored, you can return a custom state to be stored when the object is pickled. That state will be used by \code{__setstate__} when the object is unpickled. -\item[\code{__setstate__(self, state)}] -When the object is unpickled, if \code{__setstate__} is defined the object's state will be passed to it instead of directly applied to the object's \code{__dict__}. This goes hand in hand with \code{__getstate__}: when both are defined, you can represent the object's pickled state however you want with whatever you want. -\item[\code{__reduce__(self)}] -When defining extension types (i.e., types implemented using Python's C API), you have to tell Python how to pickle them if you want them to pickle them. \code{__reduce__()} is called when an object defining it is pickled. It can either return a string representing a global name that Python will look up and pickle, or a tuple. The tuple contains between 2 and 5 elements: a callable object that is called to recreate the object, a tuple of arguments for that callable object, state to be passed to \code{__setstate__} (optional), an iterator yielding list items to be pickled (optional), and an iterator yielding dictionary items to be pickled (optional). -\item[\code{__reduce_ex__(self)}] -\code{__reduce_ex__} exists for compatibility. If it is defined, \code{__reduce_ex__} will be called over \code{__reduce__} on pickling. \code{__reduce__} can be defined as well for older versions of the pickling API that did not support \code{__reduce_ex__}. -\end{description} - -\subsection{An Example} - -Our example is a \code{Slate}, which remembers what its values have been and when those values were written to it. However, this particular slate goes blank each time it is pickled: the current value will not be saved. - -\lstinputlisting{listings/slate.py} - -\section{Conclusion} - -The goal of this guide is to bring something to anyone that reads it, regardless of their experience with Python or object-oriented programming. If you're just getting started with Python, you've gained valuable knowledge of the basics of writing feature-rich, elegant, and easy-to-use classes. If you're an intermediate Python programmer, you've probably picked up some slick new concepts and strategies and some good ways to reduce the amount of code written by you and clients. If you're an expert Pythonista, you've been refreshed on some of the stuff you might have forgotten about and maybe picked up a few new tricks along the way. Whatever your experience level, I hope that this trip through Python's special methods has been truly magical (I couldn't resist the final pun). - -% Begin the appendix -\newpage -\section{Appendix 1: How to Call Magic Methods} - -Some of the magic methods in Python directly map to built-in functions; in this case, how to invoke them is fairly obvious. However, in other cases, the invocation is far less obvious. This appendix is devoted to exposing non-obvious syntax that leads to magic methods getting called. -\begin{center} -\begin{tabular}{| p{5cm} | p{5cm} | p{5cm} |} -\hline -$Magic\ Method$ & $When\ it\ gets\ invoked$ & $Explanation$\\ -\hline -\code{__new__(cls [,...])} & \code{instance = MyClass(arg1, arg2)} & \code{__new__} is called on instance creation\\ -\hline -\code{__init__(self [,...])} & \code{instance = MyClass(arg1, arg2)} & \code{__init__} is called on instance creation\\ -\hline -\code{__cmp__(self, other)} & \code{self == other}, \code{self > other}, etc. & Called for any comparison\\ -\hline -\code{__pos__(self)} & \code{+self} & Unary plus sign\\ -\hline -\code{__neg__(self)} & \code{-self} & Unary minus sign\\ -\hline -\code{__invert__(self)} & \code{~self} & Bitwise inversion\\ -\hline -\code{__index__(self)} & \code{x[self]} & Conversion when object is used as index\\ -\hline -\code{__nonzero__(self)} & \code{bool(self)} & Boolean value of the object\\ -\hline -\code{__getattr__(self, name)} & \code{self.name \# name doesn't exist} & Accessing nonexistent attribute\\ -\hline -\code{__setattr__(self, name, val)} & \code{self.name = val} & Assigning to an attribute\\ -\hline -\code{__delattr__(self, name)} & \code{del self.name} & Deleting an attribute\\ -\hline -\code{__getattribute__(self, name)} & \code{self.name} & Accessing any attribute\\ -\hline -\code{__getitem__(self, key)} & \code{self[key]} & Accessing an item using an index\\ -\hline -\code{__setitem__(self, key, val)} & \code{self[key] = val} & Assigning to an item using an index\\ -\hline -\code{__delitem__(self, key)} & \code{del self[key]} & Deleting an item using an index\\ -\hline -\code{__iter__(self)} & \code{for x in self} & Iteration\\ -\hline -\code{__contains__(self, value)} & \code{value in self}, \code{value not in self} & Membership tests using \code{in}\\ -\hline -\code{__call__(self [,...])} & \code{self(args)} & "Calling" an instance\\ -\hline -\code{__enter__(self)} & \code{with self as x:} & \code{with} statement context managers\\ -\hline -\code{__exit__(self, exc, val, trace)} & \code{with self as x:} & \code{with} statement context managers\\ -\hline -\code{__getstate__(self)} & \code{pickle.dump(pkl_file, self)} & Pickling\\ -\hline -\code{__setstate__(self)} & \code{data = pickle.load(pkl_file)} & Pickling\\ -\hline -\end{tabular} -\end{center} - -\section{Appendix 2: Changes in Python 3} - -Here, we document a few major places where Python 3 differs from 2.x in terms of its object model: - -\begin{itemize} - \item Since the distinction between string and unicode has been done away with in Python 3, \code{__unicode__} is gone and \code{__bytes__} (which behaves similarly to \code{__str__} and \code{__unicode__} in 2.7) exists for a new built-in for constructing byte arrays. - \item Since division defaults to true division in Python 3, \code{__div__} is gone in Python 3 - \item \code{__coerce__} is gone due to redundancy with other magic methods and confusing behavior - \item \code{__cmp__} is gone due to redundancy with other magic methods - \item \code{__nonzero__} has been renamed to \code{__bool__} -\end{itemize} - -\end{document} diff --git a/style.css b/style.css deleted file mode 100755 index e52b161..0000000 --- a/style.css +++ /dev/null @@ -1,143 +0,0 @@ -p, h1, h2, h3, h4, h5, h6, ul, ol, dl, pre, table { - width: 800px; - margin-left: auto; - margin-right: auto; -} - -table { border: 1px solid #ccc; - background-color: #f5f5f5; - padding: 5px 5px; - width: 900px; -} - -th, td { border: 1px solid #ccc;} - -h1, h2, h3, h4, h5, h6 { - font-family: "Hoefler Text", serif; -} - -body { - background-color: #fafafa; - color: #111; - font-family: Georgia, serif; - font-size: 17px; - line-height: 23px; - margin-top: 68px; /* 4em */ -} - -pre,code { - font: normal 15px/20px Menlo, consolas, mono; -} - -pre { - border: 1px solid #ddd; - background-color: #f5f5f5; - padding: 15px 20px; - overflow-x: auto; -} - -code { - background-color: #f5f5f5; - padding: 0px 4px; -} - -a { - text-decoration: none; - color: #D63500; -} - -h1 a, h2 a, h3 a, h4 a, h5 a, h6 a { - color: inherit; -} - -h1 a:hover, h2 a:hover, h3 a:hover, h4 a:hover, h5 a:hover, h6 a:hover { - text-decoration: none; - color: #D63500; -} - -a:hover { - text-decoration: underline; -} - -dd { - margin-bottom: 10px; -} - -dl:first-of-type dd { - margin-bottom: 0; -} - -/* pygments CSS, adapted from Richard Leland's tango.css, found on github -/* repo richleland/pygments-css */ - -.codehilite .hll { background-color: #ffffcc } -.codehilite .c { color: #8f5902; font-style: italic } /* Comment */ -.codehilite .err { color: #a40000; border: 1px solid #ef2929 } /* Error */ -.codehilite .g { color: #000000 } /* Generic */ -.codehilite .k { color: #204a87; font-weight: bold } /* Keyword */ -.codehilite .l { color: #000000 } /* Literal */ -.codehilite .n { color: #000000 } /* Name */ -.codehilite .o { color: #ce5c00; font-weight: bold } /* Operator */ -.codehilite .x { color: #000000 } /* Other */ -.codehilite .p { color: #000000; font-weight: bold } /* Punctuation */ -.codehilite .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */ -.codehilite .cp { color: #8f5902; font-style: italic } /* Comment.Preproc */ -.codehilite .c1 { color: #8f5902; font-style: italic } /* Comment.Single */ -.codehilite .cs { color: #8f5902; font-style: italic } /* Comment.Special */ -.codehilite .gd { color: #a40000 } /* Generic.Deleted */ -.codehilite .ge { color: #000000; font-style: italic } /* Generic.Emph */ -.codehilite .gr { color: #ef2929 } /* Generic.Error */ -.codehilite .gh { color: #000080; font-weight: bold } /* Generic.Heading */ -.codehilite .gi { color: #00A000 } /* Generic.Inserted */ -.codehilite .go { color: #000000; font-style: italic } /* Generic.Output */ -.codehilite .gp { color: #8f5902 } /* Generic.Prompt */ -.codehilite .gs { color: #000000; font-weight: bold } /* Generic.Strong */ -.codehilite .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ -.codehilite .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */ -.codehilite .kc { color: #204a87; font-weight: bold } /* Keyword.Constant */ -.codehilite .kd { color: #204a87; font-weight: bold } /* Keyword.Declaration */ -.codehilite .kn { color: #204a87; font-weight: bold } /* Keyword.Namespace */ -.codehilite .kp { color: #204a87; font-weight: bold } /* Keyword.Pseudo */ -.codehilite .kr { color: #204a87; font-weight: bold } /* Keyword.Reserved */ -.codehilite .kt { color: #204a87; font-weight: bold } /* Keyword.Type */ -.codehilite .ld { color: #000000 } /* Literal.Date */ -.codehilite .m { color: #0000cf; font-weight: bold } /* Literal.Number */ -.codehilite .s { color: #4e9a06 } /* Literal.String */ -.codehilite .na { color: #c4a000 } /* Name.Attribute */ -.codehilite .nb { color: #204a87 } /* Name.Builtin */ -.codehilite .nc { color: #000000 } /* Name.Class */ -.codehilite .no { color: #000000 } /* Name.Constant */ -.codehilite .nd { color: #5c35cc; font-weight: bold } /* Name.Decorator */ -.codehilite .ni { color: #ce5c00 } /* Name.Entity */ -.codehilite .ne { color: #cc0000; font-weight: bold } /* Name.Exception */ -.codehilite .nf { color: #000000 } /* Name.Function */ -.codehilite .nl { color: #f57900 } /* Name.Label */ -.codehilite .nn { color: #000000 } /* Name.Namespace */ -.codehilite .nx { color: #000000 } /* Name.Other */ -.codehilite .py { color: #000000 } /* Name.Property */ -.codehilite .nt { color: #204a87; font-weight: bold } /* Name.Tag */ -.codehilite .nv { color: #000000 } /* Name.Variable */ -.codehilite .ow { color: #204a87; font-weight: bold } /* Operator.Word */ -.codehilite .w { color: #f8f8f8; text-decoration: underline } /* Text.Whitespace */ -.codehilite .mf { color: #0000cf; font-weight: bold } /* Literal.Number.Float */ -.codehilite .mh { color: #0000cf; font-weight: bold } /* Literal.Number.Hex */ -.codehilite .mi { color: #0000cf; font-weight: bold } /* Literal.Number.Integer */ -.codehilite .mo { color: #0000cf; font-weight: bold } /* Literal.Number.Oct */ -.codehilite .sb { color: #4e9a06 } /* Literal.String.Backtick */ -.codehilite .sc { color: #4e9a06 } /* Literal.String.Char */ -.codehilite .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */ -.codehilite .s2 { color: #4e9a06 } /* Literal.String.Double */ -.codehilite .se { color: #4e9a06 } /* Literal.String.Escape */ -.codehilite .sh { color: #4e9a06 } /* Literal.String.Heredoc */ -.codehilite .si { color: #4e9a06 } /* Literal.String.Interpol */ -.codehilite .sx { color: #4e9a06 } /* Literal.String.Other */ -.codehilite .sr { color: #4e9a06 } /* Literal.String.Regex */ -.codehilite .s1 { color: #4e9a06 } /* Literal.String.Single */ -.codehilite .ss { color: #4e9a06 } /* Literal.String.Symbol */ -.codehilite .bp { color: #3465a4 } /* Name.Builtin.Pseudo */ -.codehilite .vc { color: #000000 } /* Name.Variable.Class */ -.codehilite .vg { color: #000000 } /* Name.Variable.Global */ -.codehilite .vi { color: #000000 } /* Name.Variable.Instance */ -.codehilite .il { color: #0000cf; font-weight: bold } /* Literal.Number.Integer.Long */ - - diff --git a/table.markdown b/table.markdown deleted file mode 100755 index 7a2b5aa..0000000 --- a/table.markdown +++ /dev/null @@ -1,32 +0,0 @@ -#A Guide to Python's Magic Methods# - -###Rafe Kettler### - -Copyright © 2012 Rafe Kettler - -Version 1.17 - -A PDF version of this guide can be obtained from [my site](http://www.rafekettler.com/magicmethods.pdf) or [Github](https://github.com/RafeKettler/magicmethods/raw/master/magicmethods.pdf). The magic methods guide has [a git repository at http://www.github.com/RafeKettler/magicmethods](http://www.github.com/RafeKettler/magicmethods). Any issues can be reported -there, along with comments, (or even contributions!). - -**Table of Contents** - - - 1. [Introduction](#intro) - 2. [Construction and Initialization](#construction) - 3. [Making Operators Work on Custom Classes](#operators) - - [Comparison magic methods](#comparisons) - - [Numeric magic methods](#numeric) - 4. [Representing your Classes](#representations) - 5. [Controlling Attribute Access](#access) - 6. [Making Custom Sequences](#sequence) - 7. [Reflection](#reflection) - 8. [Abstract Base Classes](#abcs) - 9. [Callable Objects](#callable) - 10. [Context Managers](#context) - 11. [Building Descriptor Objects](#descriptor) - 12. [Copying](#copying) - 13. [Pickling your Objects](#pickling) - 14. [Conclusion](#conclusion) - 15. [Appendix 1: How to Call Magic Methods](#appendix1) - 16. [Appendix 2: Changes in Python 3](#appendix2) \ No newline at end of file

6ao=c9M|nI<^6i?rZs=4-GRt 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 UH9Lmw|D=}p9f_RjFd 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 zcvAppendix 1: How to Call Magic Methods## - -Some of the magic methods in Python directly map to built-in functions; in this case, how to invoke them is fairly obvious. However, in other -cases, the invocation is far less obvious. This appendix is devoted to exposing non-obvious syntax that leads to magic methods getting called. - -Magic Method | When it gets invoked (example) | Explanation ----------------------- | ---------------------------------- | -------------------------------------------- -`__new__(cls [,...])` | `instance = MyClass(arg1, arg2)` | `__new__` is called on instance creation -`__init__(self [,...])` | `instance = MyClass(arg1, arg2)` | `__init__` is called on instance creation -`__cmp__(self, other)` | `self == other`, `self > other`, etc. | Called for any comparison -`__pos__(self)` | `+self` | Unary plus sign -`__neg__(self)` | `-self` | Unary minus sign -`__invert__(self)` | `~self` | Bitwise inversion -`__index__(self)` | `x[self]` | Conversion when object is used as index -`__nonzero__(self)` | `bool(self)` | Boolean value of the object -`__getattr__(self, name)` | `self.name # name doesn't exist` | Accessing nonexistent attribute -`__setattr__(self, name, val)` | `self.name = val` | Assigning to an attribute -`__delattr__(self, name)` | `del self.name` | Deleting an attribute -`__getattribute__(self, name)` | `self.name` | Accessing any attribute -`__getitem__(self, key)` | `self[key]` | Accessing an item using an index -`__setitem__(self, key, val)` | `self[key] = val` | Assigning to an item using an index -`__delitem__(self, key)` | `del self[key]` | Deleting an item using an index -`__iter__(self)` | `for x in self` | Iteration -`__contains__(self, value)` | `value in self`, `value not in self` | Membership tests using `in` -`__call__(self [,...])` | `self(args)` | "Calling" an instance -`__enter__(self)` | `with self as x:` | `with` statement context managers -`__exit__(self, exc, val, trace)` | `with self as x:` | `with` statement context managers -`__getstate__(self)` | `pickle.dump(pkl_file, self)` | Pickling -`__setstate__(self)` | `data = pickle.load(pkl_file)` | Pickling - -Hopefully, this table should have cleared up any questions you might have had about what syntax invokes which magic method. - -##Appendix 2: Changes in Python 3## - -Here, we document a few major places where Python 3 differs from 2.x in terms of its object model: - - - Since the distinction between string and unicode has been done away with in Python 3, `__unicode__` is gone and `__bytes__` (which behaves similarly to `__str__` and `__unicode__` in 2.7) exists for a new built-in for constructing byte arrays. - - Since division defaults to true division in Python 3, `__div__` is gone in Python 3 - - `__coerce__` is gone due to redundancy with other magic methods and confusing behavior - - `__cmp__` is gone due to redundancy with other magic methods - - `__nonzero__` has been renamed to `__bool__` diff --git a/listings/access.py b/listings/access.py deleted file mode 100755 index 968c9af..0000000 --- a/listings/access.py +++ /dev/null @@ -1,23 +0,0 @@ -class AccessCounter(object): - '''A class that contains a value and implements an - access counter. The counter increments each time the - value is changed.''' - - def __init__(self, val): - super(AccessCounter, self).__setattr__('counter', 0) - super(AccessCounter, self).__setattr__('value', val) - - def __setattr__(self, name, value): - if name == 'value': - super(AccessCounter, self).__setattr__('counter', - self.counter + 1) - # Make this unconditional. - # If you want to prevent other attributes to be set, - # raise AttributeError(name) - super(AccessCounter, self).__setattr__(name, value) - - def __delattr__(self, name): - if name == 'value': - super(AccessCounter, self).__setattr__('counter', - self.counter + 1) - super(AccessCounter, self).__delattr__(name)] diff --git a/listings/call.py b/listings/call.py deleted file mode 100755 index 0e34e18..0000000 --- a/listings/call.py +++ /dev/null @@ -1,13 +0,0 @@ -class Entity: - '''Class to represent an entity. Callable to update - the entity's position.''' - - def __init__(self, size, x, y): - self.x, self.y = x, y - self.size = size - - def __call__(self, x, y): - '''Change the position of the entity.''' - self.x, self.y = x, y - - # snip... diff --git a/listings/closer.py b/listings/closer.py deleted file mode 100755 index cbc1ff9..0000000 --- a/listings/closer.py +++ /dev/null @@ -1,16 +0,0 @@ -class Closer: - '''A context manager to automatically close an object with a - close() method in a with statement.''' - - def __init__(self, obj): - self.obj = obj - - def __enter__(self): - return self.obj # bound to target - - def __exit__(self, exception_type, exception_val, trace): - try: - self.obj.close() - except AttributeError: # obj isn't closable - print 'Not closable.' - return True # exception handled successfully diff --git a/listings/descriptor.py b/listings/descriptor.py deleted file mode 100755 index e93db3b..0000000 --- a/listings/descriptor.py +++ /dev/null @@ -1,24 +0,0 @@ -class Meter(object): - '''Descriptor for a meter.''' - - def __init__(self, value=0.0): - self.value = float(value) - def __get__(self, instance, owner): - return self.value - def __set__(self, instance, value): - self.value = float(value) - -class Foot(object): - '''Descriptor for a foot.''' - - def __get__(self, instance, owner): - return instance.meter * 3.2808 - def __set__(self, instance, value): - instance.meter = float(value) / 3.2808 - -class Distance(object): - '''Class to represent distance holding two descriptors for feet and - meters.''' - meter = Meter() - foot = Foot() - diff --git a/listings/fileobject.py b/listings/fileobject.py deleted file mode 100755 index 8890c0b..0000000 --- a/listings/fileobject.py +++ /dev/null @@ -1,13 +0,0 @@ -from os.path import join - -class FileObject: - '''Wrapper for file objects to make sure the file gets closed - on deletion.''' - - def __init__(self, filepath='~', filename='sample.txt'): - # open a file filename in filepath in read and write mode - self.file = open(join(filepath, filename), 'r+') - - def __del__(self): - self.file.close() - del self.file diff --git a/listings/list.py b/listings/list.py deleted file mode 100755 index a56c7bc..0000000 --- a/listings/list.py +++ /dev/null @@ -1,50 +0,0 @@ -class FunctionalList: - '''A class wrapping a list with some extra functional - magic, like head, tail, init, last, drop, and take.''' - - def __init__(self, values=None): - if values is None: - self.values = [] - else: - self.values = values - - def __len__(self): - return len(self.values) - - def __getitem__(self, key): - # if key is of invalid type or value, the list values - # will raise the error - return self.values[key] - - def __setitem__(self, key, value): - self.values[key] = value - - def __delitem__(self, key): - del self.values[key] - - def __iter__(self): - return iter(self.values) - - def __reversed__(self): - return reversed(self.values) - - def append(self, value): - self.values.append(value) - def head(self): - # get the first element - return self.values[0] - def tail(self): - # get all elements after the first - return self.values[1:] - def init(self): - # get elements up to the last - return self.values[:-1] - def last(self): - # get last element - return self.values[-1] - def drop(self, n): - # get all elements except first n - return self.values[n:] - def take(self, n): - # get first n elements - return self.values[:n] diff --git a/listings/slate.py b/listings/slate.py deleted file mode 100755 index b6f2ec6..0000000 --- a/listings/slate.py +++ /dev/null @@ -1,31 +0,0 @@ -import time - -class Slate: - '''Class to store a string and a changelog, and forget its value when - pickled.''' - - def __init__(self, value): - self.value = value - self.last_change = time.asctime() - self.history = {} - - def change(self, new_value): - # Change the value. Commit last value to history - self.history[self.last_change] = self.value - self.value = new_value - self.last_change = time.asctime() - - def print_changes(self): - print 'Changelog for Slate object:' - for k, v in self.history.items(): - print '%s\t %s' % (k, v) - - def __getstate__(self): - # Deliberately do not return self.value or self.last_change. - # We want to have a "blank slate" when we unpickle. - return self.history - - def __setstate__(self, state): - # Make self.history = state and last_change and value undefined - self.history = state - self.value, self.last_change = None, None diff --git a/listings/word.py b/listings/word.py deleted file mode 100755 index a9a45e8..0000000 --- a/listings/word.py +++ /dev/null @@ -1,20 +0,0 @@ -class Word(str): - '''Class for words, defining comparison based on word length.''' - - def __new__(cls, word): - # Note that we have to use __new__. This is because str is an - # immutable type, so we have to initialize it early (at creation) - if ' ' in word: - print "Value contains spaces. Truncating to first space." - word = word[:word.index(' ')] - # Word is now all chars before first space - return str.__new__(cls, word) - - def __gt__(self, other): - return len(self) > len(other) - def __lt__(self, other): - return len(self) < len(other) - def __ge__(self, other): - return len(self) >= len(other) - def __le__(self, other): - return len(self) <= len(other) diff --git a/magicmarkdown.py b/magicmarkdown.py deleted file mode 100755 index 80513de..0000000 --- a/magicmarkdown.py +++ /dev/null @@ -1,49 +0,0 @@ -""" -magicmarkdown.py -utility script for changing markdown from magic methods guide into HTML -""" - -import markdown - -HEADER = """ - - -A Guide to Python's Magic Methods « rafekettler.com - - - - -""" - -FOOTER = """ - - -""" - -table = open('table.markdown').read() -body = open('magicmethods.markdown').read() -appendix = open('appendix.markdown').read() - -table_text = markdown.markdown(table) -body_text = markdown.markdown(body, - ['def_list', 'codehilite']) -appendix_text = markdown.markdown(appendix, ['tables']) - -with open('magicmethods.html', 'w') as out: - out.write(HEADER) - out.write(table_text) - out.write(body_text) - out.write(appendix_text) - out.write(FOOTER) - diff --git a/magicmethods.html b/magicmethods.html deleted file mode 100644 index fe32293..0000000 --- a/magicmethods.html +++ /dev/null @@ -1,773 +0,0 @@ - - - -A Guide to Python's Magic Methods « rafekettler.com - - - - -