code: def _get_bakery_dynamic_attr(self, attname, obj, args=None, default=None):
          
          try:
              attr = getattr(self, attname)
          except AttributeError:
              return default
  
          if callable(attr) or args:
              args = args[:] if args else []
  
              # 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 + len(args):  # one argument is 'self'
                  args.append(obj)
              return attr(*args)
  
          return attr
docs: Allows subclasses to provide an attribute (say, 'foo') in three
          different ways: As a fixed class-level property or as a method
          foo(self) or foo(self, obj). The second argument argument 'obj' is
          the "subject" of the current Feed invocation. See the Django Feed
          documentation for details.
  
          This method was shamelessly stolen from the Feed class and extended
          with the ability to pass additional arguments to subclass methods.