0

I need to make a custom comparison between objects during a restricted scope, is there any way to do that and without polluting the operator, eg restore the previous eq afterwards ?

class Test():
    def __eq__(self, i):
        print "eq lvl 1"

def test(a , b):
    def _itest(i):
        print "eq lvl 2"

>>> a = Test()
>>> b = Test()
>>> a == b
eq lvl 1
>>> test(a, b)
>>> a == b
Traceback (most recent call last):
File "<console>", line 1, in <module>
TypeError: _itest() takes exactly 1 argument (2 given)

I'm doing so because given certain condition I need to degrade the eq operator.

Note: I want to override __eq__ in order to use the in statement.

Ketouem
  • 3,820
  • 1
  • 19
  • 29

1 Answers1

1

Your sample is too small so I'll try to extrapolate...

def somewhere():
  old_eq = obj.__eq__
  def new_eq(a, b):
    return False
  obj.__eq__ = new_eq
  # ^^^ Will fail here because you can't assign new __eq__ to the object
  if not obj == obj:
    print('Well, ok...')
  obj.__eq__ = old_eq

You still can try making you own object with configurable (via hooks) __eq__ method and substitute your object with this one, like:

class Patched(YourClass):
  def __eq__(self, i):
    if self.original__eq:
      return YourClass.__eq__(self, i):
    else:
      pass # your code here
kworr
  • 3,579
  • 1
  • 21
  • 33