Sobes.tech
Junior — Middle

Pode explicar o que significa o termo 'descriptor' no contexto do Python e como funciona?

sobes.tech IA

Resposta da IA

Em Python, o descritor é um objeto que controla o acesso aos atributos de outro objeto. Implementa um ou vários métodos especiais: __get__, __set__ e __delete__. Quando um atributo com descritor é solicitado, definido ou removido, os métodos correspondentes do descritor são chamados.

Isto permite controlar o comportamento dos atributos, por exemplo, implementar propriedades calculadas, validação de valores ou inicialização preguiçosa.

Exemplo de um descritor simples para verificar o tipo de valor:

class Typed:
    def __init__(self, name, expected_type):
        self.name = name
        self.expected_type = expected_type

    def __get__(self, instance, owner):
        return instance.__dict__[self.name]

    def __set__(self, instance, value):
        if not isinstance(value, self.expected_type):
            raise TypeError(f"Esperava-se um tipo {self.expected_type.__name__}")
        instance.__dict__[self.name] = value

class Person:
    age = Typed('age', int)

p = Person()
p.age = 30  # funciona
# p.age = 'trinta'  # causará um TypeError

Assim, os descritores são uma ferramenta poderosa para gerir o acesso aos atributos em Python.