我需要在限制范围内对对象进行自定义比较,有没有办法做到这一点并且不会污染操作员,例如之后恢复之前的 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
声明。
答案 0 :(得分: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