code: def _get_dynamic_attr(self, attname, obj, default=None):
          
          try:
              attr = getattr(self, attname)
          except AttributeError:
              return default
          if callable(attr):
              # Check co_argcount rather than try/excepting the function and
              # catching the TypeError, because something inside the function
              # may raise the TypeError. This technique is more accurate.
              try:
                  code = six.get_function_code(attr)
              except AttributeError:
                  code = six.get_function_code(attr.__call__)
              if code.co_argcount == 2:       # one argument is 'self'
                  return attr(obj)
              else:
                  return attr()
          return attr
docs: Copied from django.contrib.syndication.views.Feed (v1.7.1)