Практическое использование дескриптора данных в Python

Недавно изучил такую вещь, как data и non-data дескрипторы в Python, но не уверен, стоит ли применять такой подход в реальных проектах. Знаю, что они иногда встречаются в стандартной библиотеке, но хотелось бы узнать у опытных разработчиков, часто ли на практике возникает необходимость их использования, например для валидации данных?

К примеру, нужно проверить, является ли переданный URL строкой и содержит ли в себе http:// или https://

import requests

class BaseDescriptor:
    # Здесь код стандартного data-дескриптора

# Здесь проверяем корректность типа
class TypedClass(BaseDescriptor):
    expected_type = type(None)

    def __set__(self, instance, value):
       if not isinstance(value, self.expected_type):
          raise TypeError(f'Expected {self.expected_type}, got {type(value).__name__} instead.')
       super().__set__(instance, value)

# Проверяем, имеет ли ссылка http:// или https://
class ValidSchema(BaseDescriptor):

    def __set__(self, instance, value: str):
        if not value.startswith(("https://", "http://")):
            raise requests.exceptions.InvalidSchema("URL must contain ('https://', 'http://')")
        super().__set__(instance, value)


class ValidURL(TypedClass, ValidSchema):
    expected_type = str


class SimpleRequest(BaseRequest):
    url = ValidURL()

    def __call__(self, url: str, *args):
        self.url = url

Насколько такой способ уместен и можно ли его смело использовать?


Ответы (0 шт):