Courses/Metaprogramming

๐Ÿง™ Metaprogramming

Descriptors

Custom attribute behavior via __get__ and __set__.

A descriptor is a class implementing __get__/__set__. Python's property is built on this protocol.

class Positive:
    def __set_name__(self, owner, name):
        self.name = "_" + name
    def __get__(self, obj, objtype=None):
        return getattr(obj, self.name)
    def __set__(self, obj, value):
        if value < 0:
            raise ValueError("must be positive")
        setattr(obj, self.name, value)
main.py
Output
Press Run to execute.
Expected output
100
rejected: must be positive

Sign in to track your progress across lessons.