Search notes:

Python: descriptor

A descriptor is an object that defines at least one of the dunders __get__, __set__ or __delete__.
class desc:

  def __get__(self, obj, objtype):
      print('__get__ was called, obj.ident =', obj.ident)
      return self.val

  def __set__(self, obj, val):
      print('__set__ was called, obj.ident =', obj.ident)
      self.val = val

  def __delete__(self, obj):
      print('__delete__ was called, obj.ident =', obj.ident)


class CLS:
#
# Note: D (the descriptor object) is a class
# variable, not an instance variable:
#
  D = desc()

  def __init__(self, ident):
      self.ident = ident


obj_a = CLS('A')
obj_b = CLS('B')

obj_a.D = 42
#
#  __set__ was called, obj.ident = A(

obj_b.D = 99
#
#  __set__ was called, obj.ident = B

val_a = obj_a.D
#
#  __get__ was called, obj.ident = A

val_b = obj_b.D
#
#  __get__ was called, obj.ident = B

print(val_a)
#
#  99

print(val_b)
#
#  99

del obj_a.D
#
#  __delete__ was called, obj.ident = A
Github repository about-Python, path: /objects/descriptor/demo.py

Index