On Jun 21, 2009, at 5:23 PM, Scott David Daniels wrote:
Hrvoje Niksic wrote:
...
class class_or_instance(object):
   def __init__(self, fn):
       self.fn = fn
   def __get__(self, obj, cls):
       if obj is not None:
           return lambda *args, **kwds: self.fn(obj, *args, **kwds)
       else:
           return lambda *args, **kwds: self.fn(cls, *args, **kwds)
...

Just to polish a bit:

   import functools

   class ClassOrInstance(object):
       def __init__(self, fn):
           self._function = fn
           self._wrapper = functools.wraps(fn)

       def __get__(self, obj, cls):
           return self._wrapper(functools.partial(self._function,
                          cls if obj is None else obj))



from types import MethodType

class ClassOrInstance(object):
    def __init__(self, func):
        self._func = func

    def __get__(self, obj, cls):
        return MethodType(self._func, cls if obj is None else obj, cls)


-Miles

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to