Advanced

Descriptors

Descriptors customize attribute access using __get__, __set__, and __delete__.

Example

class Age:
    def __get__(self, obj, objtype=None):
        return obj._age

    def __set__(self, obj, value):
        if value < 0:
            raise ValueError("Invalid age")
        obj._age = value

class Person:
    age = Age()

p = Person()
p.age = 30
print(p.age)
✔ Used in ORMs
✔ Used in validation frameworks