Metadata-Version: 2.1
Name: singledispatchmethod
Version: 1.0
Summary: Backport of @functools.singledispatchmethod to Python 2.7-3.7.
Home-page: https://github.com/ikalnytskyi/singledispatchmethod
Author: Ihor Kalnytskyi
Author-email: ihor@kalnytskyi.com
License: MIT
Project-URL: Documentation, https://docs.python.org/3.8/library/functools.html#functools.singledispatchmethod
Project-URL: Source, https://github.com/ikalnytskyi/singledispatchmethod
Project-URL: Bugs, https://github.com/ikalnytskyi/singledispatchmethod/issues
Description: singledispatchmethod
        ====================
        
        Backport of ``@functools.singledispatchmethod`` decorator [1]_ from
        Python 3.8 to Python 2.7-3.7. These are merely ~30 lines of code, but
        why bother yourself with copypasta?
        
        .. code:: bash
        
           $ pip install singledispatchmethod
        
        The decorator transforms a method into a single-dispatch [2]_ generic
        function [3]_. Note that since the dispatch happens on the type of the
        first non-self or non-cls argument, you have to create your function
        accordingly:
        
        .. code:: python
        
            from singledispatchmethod import singledispatchmethod
        
            class Negator:
        
                @singledispatchmethod
                def neg(self, arg):
                    raise NotImplementedError("Cannot negate a")
        
                @neg.register
                def _(self, arg: int):
                    return -arg
        
                @neg.register
                def _(self, arg: bool):
                    return not arg
        
        ``@singledispatchmethod`` supports nesting with other decorators such as
        ``@classmethod``. However, in order to expose ``dispatcher.register``,
        ``@singledispatchmethod`` must be the *outer most* decorator. Here is
        the ``Negator`` class with the ``neg`` methods being class bound:
        
        .. code:: python
        
            from singledispatchmethod import singledispatchmethod
        
            class Negator:
        
                @singledispatchmethod
                @classmethod
                def neg(cls, arg):
                    raise NotImplementedError("Cannot negate a")
        
                @neg.register
                @classmethod
                def _(cls, arg: int):
                    return -arg
        
                @neg.register
                @classmethod
                def _(cls, arg: bool):
                    return not arg
        
        The same pattern can be used for other similar decorators, such as
        ``@staticmethod`` or ``@abstractmethod``. Please note, since
        ``@singledispatchmethod`` decorator is based on
        ``@functools.singledispatch``, type annotations are supported by
        ``dispatcher.register`` only since Python 3.7.
        
        .. [1] https://docs.python.org/3.8/library/functools.html#functools.singledispatchmethod
        .. [2] https://docs.python.org/3.8/glossary.html#term-single-dispatch
        .. [3] https://docs.python.org/3.8/glossary.html#term-generic-function
        
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Python Software Foundation License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Software Development :: Libraries
Description-Content-Type: text/x-rst
