def get(self, key: str, default: Any = NoValue) -> Any:
        """
        This is the most tolerant way to fetch a config value using the following
        strategies in priority order:

          1. Get the config value
          2. Return the default value provided as an argument
          3. Return the default value declared for this field
          4. Return the zero value for the type of this field
        """

        key = self._resolve_key(key)

        if key in self.__dict__:
            return self.__dict__[key]

        if default is NoValue:
            default = getattr(self.__class__, key, default)
        if default is NoValue:
            # Fallback to getting getting the zero value for the type of this attribute
            # e.g. 0, False, empty list, empty dict, etc
            annotation = self.get_fields().get(self._resolve_key(key))
            assert annotation
            return annotation.zero_value()

        return default

        This is the most tolerant way to fetch a config value using the following
        strategies in priority order:

          1. Get the config value
          2. Return the default value provided as an argument
          3. Return the default value declared for this field
          4. Return the zero value for the type of this field
        
poethepoet/options/__init__.py