Skip to main content

Multiple dispatch

Project description

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 https://multiple-dispatch.readthedocs.io/

Example

>>> 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)
3

>>> 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

or

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.

License

New BSD. See License file.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

multipledispatch-0.6.0.tar.gz (10.3 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

multipledispatch-0.6.0-py3-none-any.whl (11.9 kB view details)

Uploaded Python 3

multipledispatch-0.6.0-py2-none-any.whl (11.9 kB view details)

Uploaded Python 2

File details

Details for the file multipledispatch-0.6.0.tar.gz.

File metadata

  • Download URL: multipledispatch-0.6.0.tar.gz
  • Upload date:
  • Size: 10.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/39.2.0 requests-toolbelt/0.8.0 tqdm/4.24.0 CPython/3.6.5

File hashes

Hashes for multipledispatch-0.6.0.tar.gz
Algorithm Hash digest
SHA256 a7ab1451fd0bf9b92cab3edbd7b205622fb767aeefb4fb536c2e3de9e0a38bea
MD5 9516c48d9eb7afecb0927f8ed5a7709f
BLAKE2b-256 378676c69eb0dac361c83e2e3952051bec40bd2f488127f5479d6222b5853f04

See more details on using hashes here.

File details

Details for the file multipledispatch-0.6.0-py3-none-any.whl.

File metadata

  • Download URL: multipledispatch-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 11.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/39.2.0 requests-toolbelt/0.8.0 tqdm/4.24.0 CPython/3.6.5

File hashes

Hashes for multipledispatch-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a55c512128fb3f7c2efd2533f2550accb93c35f1045242ef74645fc92a2c3cba
MD5 1970cb68506a6a5bfd1ebf6ae9bd054b
BLAKE2b-256 8979429ecef45fd5e4504f7474d4c3c3c4668c267be3370e4c2fd33e61506833

See more details on using hashes here.

File details

Details for the file multipledispatch-0.6.0-py2-none-any.whl.

File metadata

  • Download URL: multipledispatch-0.6.0-py2-none-any.whl
  • Upload date:
  • Size: 11.9 kB
  • Tags: Python 2
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/39.2.0 requests-toolbelt/0.8.0 tqdm/4.24.0 CPython/3.6.5

File hashes

Hashes for multipledispatch-0.6.0-py2-none-any.whl
Algorithm Hash digest
SHA256 407e6d8c5fa27075968ba07c4db3ef5f02bea4e871e959570eeb69ee39a6565b
MD5 a5dfd81714e5406820d429b6d8566b04
BLAKE2b-256 3da33638c2232eb513a9f876bb96e2e400f18d2f5bdc2e7abe84194c8bd38c2d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page