pythonbeginner

Descriptor

Advanced Python pattern: descriptor

python
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)

class Product:
    price = Positive()

    def __init__(self, price: int):
        self.price = price

p = Product(10)
print(p.price)

Use Cases

  • advanced programming
  • patterns

Tags

Related Snippets

Similar patterns you can reuse in the same workflow.