我想让两个函数彼此相等,如下所示:
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
我该怎么做?我知道我可能会覆盖eq
,ne
如果 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 = {}
通过这种方式,可以保证相同的签名值只有一个函数(有点像单例)。但我真的在寻找一些更整洁的解决方案。