class_desc/decorators/interface_required.md


from math import lgamma

Декора́тор interface_required

Декора́тор interface_required предназначен для явного указания методов, обязательных для реализации интерфейса. Он позволяет объявлять сигнатуру метода (через аннотации или явно заданную сигнатуру), тем самым обеспечивая возможность автоматического контроля за реализацией интерфейса в подклассах.

Основная информация

  • Имя файла: anb_python_components\decorators\interface_decorators.py
  • Автор: Александр Бабаев
  • Версия: 1.0.0
  • Дата начала поддержки: с версии 1.3.0

Атрибуты и методы декоратора

Параметры декоратора

  • signature: сигнатура метода, необходимая для интерфейса (опционально).
  • **kwargs: аннотации (типы параметров и возвращаемого значения), используемые для указания необходимой сигнатуры метода.

Работоспособность декоратора

Декоратор принимает функцию, предназначенную для проверки сигнатуры, и накладывает соответствующую сигнатуру на декорируемый метод. После применения этого декоратора к методу, можно проверить, соответствует ли подпись метода требованиям интерфейса.

Пример использования

Рассмотрим пример использования декоратора для интерфейса:

from anb_python_components import Interface, interface_required

class MyInterface(Interface):
    @interface_required(lambda self, number: int)
    def calculate (self, number: int) -> str:
        pass

class Implementation(MyInterface):
    def calculate (self, number: int) -> str:
        return str(number * 2)

MyInterface.check(Implementation)

Что делает декоратор?

  1. Сохраняет сигнатуру метода, указанную в декораторе, как атрибут функции (__signature__ или __annotations__).
  2. Когда класс реализуется, сигнатура метода автоматически проверяется на соответствие декларации интерфейса.

Заключение

Декоратор interface_required обеспечивает простую и наглядную схему обязательного указания сигнатур методов интерфейса, что значительно облегчает проектирование и сопровождение приложений с интерфейсами, особенно в больших проектах с несколькими уровнями наследования.

На главную