Multiple dispatch

License: Other

Language: Python

Multiple Dispatch

Build Status Coverage Status Version Status

A relatively sane approach to multiple dispatch in Python.

This implementation of multiple dispatch is efficient, mostly complete, performs static analysis to avoid conflicts, and provides optional namespace support. It looks good too.

See the documentation at


>>> from multipledispatch import dispatch

>>> @dispatch(int, int)
... def add(x, y):
...     return x + y

>>> @dispatch(object, object)
... def add(x, y):
...     return "%s + %s" % (x, y)

>>> add(1, 2)

>>> add(1, 'hello')
'1 + hello'

What this does

  • Dispatches on all non-keyword arguments
  • Supports inheritance
  • Supports instance methods
  • Supports union types, e.g. (int, float)
  • Supports builtin abstract classes, e.g. Iterator, Number, ...
  • Caches for fast repeated lookup
  • Identifies possible ambiguities at function definition time
  • Provides hints to resolve ambiguities when they occur
  • Supports namespaces with optional keyword arguments
  • Supports variadic dispatch

What this doesn't do

  • Diagonal dispatch
a = arbitrary_type()
@dispatch(a, a)
def are_same_type(x, y):
    return True
  • Efficient update: The addition of a new signature requires a full resolve of the whole function. This becomes troublesome after you get to a few hundred type signatures.

Installation and Dependencies

multipledispatch is on the Python Package Index (PyPI):

pip install multipledispatch


easy_install multipledispatch

multipledispatch supports Python 2.6+ and Python 3.2+ with a common codebase. It is pure Python and requires only the small six library as a dependency.

It is, in short, a light weight dependency.


New BSD. See License file.


Project Statistics

Sourcerank 13
Repository Size 195 KB
Stars 252
Forks 43
Watchers 15
Open issues 40
Dependencies 1
Contributors 14
Tags 4
Last updated
Last pushed

Top Contributors See all

Matthew Rocklin Phillip Cloud Andrew Peng Petr Viktorin Joe Jevnik Erik Welch Ondřej Čertík Adam Johnson Stefan Krastanov Sergey B Kirpichev Michael Overmeyer francesco-ballarin Marius van Niekerk Joseph Yen

Packages Referencing this Repo

Multiple dispatch
Latest release 0.6.0 - Updated - 252 stars

Recent Tags See all

0.6.0 August 08, 2018
0.5.0 March 02, 2018
0.4.9 October 12, 2016
0.4.8 July 08, 2015

Interesting Forks See all

Multiple dispatch
Python - BSD-3-Clause - Last pushed - 2 stars - 1 forks

Something wrong with this page? Make a suggestion

Last synced: 2018-08-08 19:04:54 UTC

Login to resync this repository