Я пытаюсь изменить Многометодный (динамический код отправки) Гвидо:Динамическая отправка и наследование в Python
http://www.artima.com/weblogs/viewpost.jsp?thread=101605
для обработки наследования и, возможно, из аргументов порядка.
например. (Проблема наследования)
class A(object):
pass
class B(A):
pass
@multimethod(A,A)
def foo(arg1,arg2):
print 'works'
foo(A(),A()) #works
foo(A(),B()) #fails
Есть ли лучший способ, чем итеративна проверка супер() каждый элемент до одного найдено?
например. (проблема упорядочения аргументов) Я думал об этом с точки зрения обнаружения столкновения.
например.
foo(Car(),Truck()) and
foo(Truck(), Car()) and
оба должны вызвать
foo(Car,Truck) # Note: @multimethod(Truck,Car) will throw an exception if @multimethod(Car,Truck) was registered first?
Я ищу специально для 'элегантного' решения. Я знаю, что я мог бы просто наложить свой путь на все возможности, но я стараюсь избегать этого. Я просто хотел получить некоторые идеи/идеи, прежде чем садиться и избивать решение.
Благодаря
Возможно, вы захотите взглянуть на PEAK-Rules, который представляет собой еще одну реализацию общей отправки в python, которая может обрабатывать наследование. http://pypi.python.org/pypi/PEAK-Rules – albertov