dol*_*eng 4 python equality metaprogramming function
我想让两个函数彼此相等,如下所示:
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
Run Code Online (Sandbox Code Playgroud)
我该怎么办?我知道我可以覆盖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 = {}
Run Code Online (Sandbox Code Playgroud)
通过这种方式可以保证只有一个函数用于相同的签名值(有点像单例).但我真的在寻找一些更整洁的解决方案.