class NonNegative:
def __set_name__(self, owner, name): self.private_name = '_' + name def __get__(self, instance, owner): return getattr(instance, self.private_name) def __set__(self, instance, value): if value < 0: raise ValueError("Negative value not allowed") setattr(instance, self.private_name, value)class Data: value = NonNegative() def __init__(self, value): self.value = valued = Data(10)