"Python - модули, пакеты, классы, экземпляры" - читать интересную книгу автора (Бройтман Олег)

Другой похожий пример:
class Process:
def __init__(self):
self.sum = 0

def add(self, v):
self.sum += v
return self.sum

p = Process()
result = map(p.add, sequence)
print p.sum
Вся разница в этом примере - мы передаем не объект p, а его метод
p.add. Но что такое p.add? В Python это особая сущность, называемая
BoundMethod. Это объект, который помнит адрес объекта p, адрес функции add
класса Process, и, когда его вызывают, в свою очередь вызывает метод класса
с правильным первым параметром self. Если обратиться к этому методу как
Process.add, то это - UnboundMethod, и его надо вызывать, подставив все
параметры в явном виде: Process.add(p, 1). Вызов в таком виде часто
используется для вызова родительского конструктора или метода:
class Foo(Bar)
def __init__(self):
Bar.__init__(self)
Еще один вариант использования этого трюка - сортировка списков. Списки
в Питоне имеют метод sort(), который принимает параметр - функцию сравнения.
Если сравнение сложное, и зависит от внешних условий, в качестве функции
можно передать заранее проинициализированный объект.