Практическое использование дескриптора данных в 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
Насколько такой способ уместен и можно ли его смело использовать?