0

制限されたスコープでオブジェクト間のカスタム比較を行う必要があります。オペレーターを汚染せずにそれを行う方法はありますか?たとえば、後で以前のeqを復元しますか?

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)

私がそうしているのは、特定の条件が与えられた場合、eq演算子を劣化させる必要があるためです。

注:ステートメント__eq__を使用するためにオーバーライドしたい。in

4

1 に答える 1

1

あなたのサンプルは小さすぎるので、外挿しようとします...

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

次のように、構成可能な (フックを介した)__eq__メソッドを使用して独自のオブジェクトを作成し、オブジェクトを次のように置き換えることができます。

class Patched(YourClass):
  def __eq__(self, i):
    if self.original__eq:
      return YourClass.__eq__(self, i):
    else:
      pass # your code here
于 2013-10-04T08:10:50.117 に答える