"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 это особая сущность, называемая класса Process, и, когда его вызывают, в свою очередь вызывает метод класса с правильным первым параметром self. Если обратиться к этому методу как Process.add, то это - UnboundMethod, и его надо вызывать, подставив все параметры в явном виде: Process.add(p, 1). Вызов в таком виде часто используется для вызова родительского конструктора или метода: class Foo(Bar) def __init__(self): Bar.__init__(self) Еще один вариант использования этого трюка - сортировка списков. Списки в Питоне имеют метод sort(), который принимает параметр - функцию сравнения. Если сравнение сложное, и зависит от внешних условий, в качестве функции можно передать заранее проинициализированный объект. |
|
|