from Multimethod import Method, Generic, AmbiguousMethodError 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

from Multimethod import Method, Generic, AmbiguousMethodError

Поиск

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 'Неоднозначный выбор метода'

 

Устойчивые объекты

 

Для того чтобы объекты жили дольше,чем создавшая их программа,необходим механизм их представления в виде последовательности байтов.Во второй лекции уже рассматривался модуль pickle,который позволяет сериализовать объекты.

 

Здесь же будет показано,как класс может способствовать более качественному консервированию объекта.Следующие методы,если их определить в классе,позволяют управлять работой модуля pickle и рассмотренной ранее функции глубокого копирования.Другими словами,правильно составленные методы дают возможность воссоздать объект,передав самую суть-состояние объекта.

 



Поделиться:


Последнее изменение этой страницы: 2024-06-27; просмотров: 55; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.128 (1.995 с.)