code: def getProperty(self, key, defaultValue=None):
          
          try:
              return self[key]
          except KeyError:
              if self.defaults is not None:
                  return self.defaults.getProperty(key, defaultValue)
              else:
                  return defaultValue
docs: Fetch the value associated with the key ``key`` in the `Properties`
          object.  If the key is not present, `defaults` is checked, and then
          *its* `defaults`, etc., until either a value for ``key`` is found or
          the next `defaults` is `None`, in which case `defaultValue` is
          returned.
  
          :param key: the key to look up the value of
          :type key: text string
          :param defaultValue: the value to return if ``key`` is not found in the
              `Properties` object
          :rtype: text string (if ``key`` was found)
          :raises TypeError: if ``key`` is not a string