Je suis en train de modifier multiméthode Guido (code d'expédition dynamique):expédition dynamique et l'héritage en python
http://www.artima.com/weblogs/viewpost.jsp?thread=101605
pour gérer l'héritage et peut-être d'arguments d'ordre.
par exemple. (Problème d'héritage)
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
Y at-il une meilleure façon de vérifier itérativement pour le super() de chaque élément jusqu'à ce qu'un se trouve?
par exemple. (problème d'ordre d'argument) Je pensais à ceci d'un point de vue de détection de collision.
par exemple.
foo(Car(),Truck()) and
foo(Truck(), Car()) and
devrait à la fois déclencher
foo(Car,Truck) # Note: @multimethod(Truck,Car) will throw an exception if @multimethod(Car,Truck) was registered first?
Je suis à la recherche spécifiquement pour une solution 'élégante'. Je sais que je pourrais juste forcer mon chemin à travers toutes les possibilités, mais j'essaie d'éviter cela. Je voulais juste obtenir des commentaires/idées avant de m'asseoir et de trouver une solution.
Merci
Vous pourriez jeter un oeil à PEAK-Rules qui est une autre implémentation de dispatch générique en python qui peut gérer l'héritage. http://pypi.python.org/pypi/PEAK-Rules – albertov