Skip to content

Instantly share code, notes, and snippets.

@magnunleno
Last active December 18, 2015 03:09
Show Gist options
  • Select an option

  • Save magnunleno/5716204 to your computer and use it in GitHub Desktop.

Select an option

Save magnunleno/5716204 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python2
# encoding: utf-8
class singledispatch(object):
__slots__ = (
'resolver',
'default',
'last',
)
def __init__(self, func):
self.resolver = {}
self.default = func
self.last = None
def register(self, *signature):
def wrapper(function):
if isinstance(function, singledispatch):
self.resolver[signature] = self.last
else:
self.resolver[signature] = function
self.last = function
return self
return wrapper
def __call__(self, *args):
signature = tuple(map(type, args))
func = self.resolver.get(signature, self.default)
return func(*args)
@singledispatch
def echo(arg):
print 'Fallback mode:',arg
@echo.register(float)
@echo.register(int)
def echo(number):
print 'Number:', number
@echo.register(str)
def echo(text):
print 'Text:', text
if __name__ == '__main__':
echo(42)
echo(3.14)
echo('Testing')
echo([1, 2, 3])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment