class IntegerValue: def __set__(self, instance, value): print('__set__ called') def __get__(self, instance, owner_class): print('__get__ called') class Point: x = IntegerValue() def test_1(): p = Point() p.x = 100 # вызывает __set__ у дескриптора p.x # вызывает __get__ у дескриптора print(p.__dict__) p.__dict__['x'] = [10, 20, 30] print(p.__dict__) print(p.x) p.x = 200 print(p.__dict__) def main(): test_1() if __name__ == '__main__': main()