SyntaxStudy
Sign Up
Python Advanced 5 min read

Descriptors

Descriptors

Descriptors define how attribute access works. Implement __get__, __set__, and __delete__ to create validated, computed, or lazily-loaded attributes.

Example
class Positive:
    def __set_name__(self, owner, name): self.name = name
    def __get__(self, obj, objtype=None):
        if obj is None: return self
        return obj.__dict__.get(self.name)
    def __set__(self, obj, value):
        if value <= 0: raise ValueError(f"{self.name} must be positive")
        obj.__dict__[self.name] = value

class Product:
    price = Positive()
    quantity = Positive()

p = Product()
p.price = 9.99    # OK
p.price = -1      # ValueError
Pro Tip

property() is a descriptor — __get__, __set__, __delete__ are its primitives.