๐ง 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)