overloading operators for a function object

Chris Rebert clp2 at rebertia.com
Sat Oct 1 01:00:33 EDT 2011


On Fri, Sep 30, 2011 at 9:50 PM, Fletcher Johnson <flt.johnson at gmail.com> wrote:
> Is it possible to overload operators for a function?
>
> For instance I would like to do something roughly like...
>
> def func_maker():
>  def func(): pass
>
>  def __eq__(other):
>    if other == "check":  return True
>    return False
>
>  func.__eq__ = __eq__
>  return func
>
> newfunc = func_maker()
> newfunc == "check" #true
> newfunc == "no" #false

You can write a callable [wrapper] object to get the same effect:

class SpecialFunction(object):
    def __call__(self, actual, args, go, here):
        return whatever

    def __eq__(self, other):
        return other == "check"

newfunc = SpecialFunction()
newfunc == "check" # => True
newfunc(1, 2, 3, 4) #=> whatever

Cheers,
Chris
--
http://rebertia.com



More information about the Python-list mailing list