code: function (func, self) {
  
          var oldReading;
          if (can.Observe) {
              // Set a callback on can.Observe to know
              // when an attr is read.
              // Keep a reference to the old reader
              // if there is one.  This is used
              // for nested live binding.
              oldReading = can.Observe.__reading;
              can.Observe.__reading = function (obj, attr) {
                  // Add the observe and attr that was read
                  // to `observed`
                  observed.push({
                      obj: obj,
                      attr: attr
                  });
              };
          }
  
          var observed = [],
              // Call the "wrapping" function to get the value. `observed`
              // will have the observe/attribute pairs that were read.
              value = func.call(self);
  
          // Set back so we are no longer reading.
          if (can.Observe) {
              can.Observe.__reading = oldReading;
          }
          return {
              value: value,
              observed: observed
          };
      }
docs: returns the - observes and attr methods are called by func - the value returned by func ex: `{value: 100, observed: [{obs: o, attr: "completed"}]}`