-- restructuredtext --

Clojure-like multimethods for Python

This package is about implementing multimethods in a style that is very much like Clojure. There is a way to declare dispatch functions over parameters and use them to distinguish between different implementations of a multimethod and there is an adhoc hierarchy of objects aside the existing hierarchy of classes and instances.

What is implemented

For now have a look at the testcases to see what is implemented, as this is still a hackish project without much documentation. There are shots at most of the needed parts and I'd say their functionality is somewhere at 80% of what would be needed, but none of it is actually production quality. It's more a research thing.

What is still planned to implement

  • when adhoc hierarchies and classes are intermixed, isa doesn't work right. I need to fully check all MRO of all classes and all derivations to make sure I catch all variations. This will need proper optimization to be performant.
  • isa currently checks for iterators, but that's stupid. It should really only check for tuples and see anything else as a normal object and not magically see anything as a sequence.
  • there is currently no optimization and caching whatsoever on method lookup. This obviously will have to change.
  • loop detection in prefer_method is currently only implemented for direct conflicts, not for loops larger than 2.
  • I think multimethods should implement the context protocol so that I can have a with block that creates a dynamically scoped version of the multimethod that can be extended inside the with block to dynamically extend multimethods and properly clean up afterwards.