我想让两个函数彼此相等,如下所示:
def fn_maker(fn_signature):
def _fn():
pass
_fn.signature = fn_signature
return _fn
# test equality of two function instances based on the equality of their signature values
>>> fa = fn_maker(1)
>>> fb = fn_maker(1)
>>> fc = fn_maker(2)
>>> fa == fb # should be True, same signature values
True
>>> fa == fc # should be False, different signature values
False
我应该怎么做?我知道我可能会覆盖 <strong>eq</strong>
和 <strong>ne</strong>
如果 fa、fb、fc 是某个类的实例。但是这里 eq 不在 dir(fa) 中并且将它添加到列表中不起作用。
我想出了一些解决方法,比如使用缓存,例如
def fn_maker(fn_signature):
if fn_signature in fn_maker.cache:
return fn_maker.cache[fn_signature]
def _fn():
pass
_fn.signature = fn_signature
fn_maker.cache[fn_signature] = _fn
return _fn
fn_maker.cache = {}
通过这种方式可以保证同一签名值只有一个函数(有点像单例)。但我真的在寻找一些更简洁的解决方案。
最佳答案
如果您将您的函数转换为某个覆盖 __call__()
以及比较运算符的类的实例,那么将很容易实现您想要的语义。
关于python - 测试python中两个函数的相等性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10794714/