Сообщить об ошибке.

Декоратор @singledispatchmethod модуля functools в Python

Универсальный метод одиночной диспетчеризации

Синтаксис:

import functools

singledispatchmethod(func)
@singledispatchmethod

Параметры:

  • func - метод, которой следует сделать универсальным.

Возвращаемое значение:

  • метод одиночной диспетчеризации.

Описание:

Декоратор singledispatchmethod() модуля functools создает из обычного метода класса - универсальный метод одиночной диспетчеризации.

Чтобы определить универсальный метод, оберните его с помощью декоратора @singledispatchmethod. Обратите внимание, что в перегруженные реализации передается тип первого аргумента, а не-self или non-cls:

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 поддерживает вложение с другими декораторами, такими как @classmethod. Обратите внимание, что для использования dispatcher.register, декоратор @singledispatchmethod должен быть внешним. Вот класс Negator с методом neg, привязанным к классу:

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

Тот же шаблон может быть использован для других подобных декораторов, например @staticmethod и других.