Sobes.tech
Junior — Middle

Можете ли објаснити шта значи термин 'дескриптор' у контексту Питона и како он ради?

sobes.tech АИ

Одговор од АИ

U Pythonu, descriptor je objekat koji kontroliše pristup atributima drugog objekta. Implementira jedan ili više posebnih metoda: __get__, __set__ i __delete__. Kada se atribut sa descriptor-om zahteva, postavlja ili briše, pozivaju se odgovarajuće metode descriptor-a.

Ovo omogućava kontrolu ponašanja atributa, na primer, implementaciju računarskih svojstava, validaciju vrednosti ili lenjinu inicijalizaciju.

Primer jednostavnog descriptor-a za proveru tipa vrednosti:

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"Očekivani tip {self.expected_type.__name__}")
        instance.__dict__[self.name] = value

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

p = Person()
p.age = 30  # radi
# p.age = 'trideset'  # izazva TypeError

Na ovaj način, descriptor-i su moćan alat za upravljanje pristupom atributima u Pythonu.