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

def getProperty(self, key, defaultValue=None):
        """
        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
        """
        try:
            return self[key]
        except KeyError:
            if self.defaults is not None:
                return self.defaults.getProperty(key, defaultValue)
            else:
                return defaultValue