好吧,如果你真的,真的想,看看这个快速破解。它使用包装类将模块包装在一个类中,因此您可以使用__getattr__
:
import sys
import functools
def add(a, b):
return a + b
def sub(a, b):
return a - b
class Wrapper(object):
def __init__(self, wrapped):
self.wrapped = wrapped
def __getattr__(self, name):
try:
# quick hack. Don't try this at home :-)
f = ''.join(x for x in name if not x.isdigit())
n = ''.join(x for x in name if x.isdigit())
return functools.partial(getattr(self.wrapped, f), int(n))
except:
return getattr(self.wrapped, name)
sys.modules[__name__] = Wrapper(sys.modules[__name__])
现在,当你add10(12)
在这个模块上调用 eg 时,结果是 22。注意方法名不能以数字开头,但是你可以使用 like_add
的名字并调用方法 like_55add(45)
等等。
但我会听从Haidro 的建议:你不想那样做。只需使用两个参数调用该方法就简单多了。