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.