Опубликован: 22.12.2005 | Доступ: свободный | Студентов: 18211 / 648 | Оценка: 4.18 / 3.71 | Длительность: 16:16:00
ISBN: 978-5-9556-0109-0
Лекция 4:

Объектно-ориентированное программирование

Мультиметоды

Некоторые объектно-ориентированные "штучки" не входят в стандартный Python или стандартную библиотеку. Ниже будут рассмотрены мультиметоды - методы, сочетающие объекты сразу нескольких различных классов. Например, сложение двух чисел различных типов фактически требует использования мультиметода. Если "одиночный" метод достаточно задать для каждого класса, то мультиметод требует задания для каждого сочетания классов, которые он обслуживает:

>>> import operator
>>> operator.add(1, 2)
3
>>> operator.add(1.0, 2)
3.0
>>> operator.add(1, 2.0)
3.0
>>> operator.add(1, 1+2j)
(2+2j)
>>> operator.add(1+2j, 1)
(2+2j)

В этом примере operator.add ведет себя как мультиметод, выполняя разные действия для различных комбинаций параметров.

Для организации собственных мультиметодов можно воспользоваться модулем Multimethod (автор Neel Krishnaswami), который легко найти в Интернете. Следующий пример, адаптированный из документации модуля, показывает построение собственного мультиметода:

from Multimethod import Method, Generic, AmbiguousMethodError

# классы, для которых будет определен мультиметод
class A: pass
class B(A): pass

# функции мультиметода
def m1(a, b): return 'AA'
def m2(a, b): return 'AB'
def m3(a, b): return 'BA'

# определение мультиметода (без одной функции)
g = Generic()
g.add_method(Method((A, A), m1))
g.add_method(Method((A, B), m2))
g.add_method(Method((B, A), m3))

# применение мультиметода
try:
    print 'Типы аргументов:', 'Результат'
    print 'A, A:', g(A(), A())
    print 'A, B:', g(A(), B())
    print 'B, A:', g(B(), A())
    print 'B, B:', g(B(), B())
except AmbiguousMethodError:
    print 'Неоднозначный выбор метода'
Денис Хохлов
Денис Хохлов

Будет ли адаптация лекций под Python 3?

Арсений Бердюгин
Арсений Бердюгин

скачал с оффсайта последнюю версию python под windows. запускаю примеры из лекции и оно ругается на синтаксис.

Синтаксис примеров в лекции не актуален?
 

Марина Дайнеко
Марина Дайнеко
Россия, Moscow, Nope, 2008
Иван Сельченков
Иван Сельченков
Россия