假设您有这个:
class Functions():
def __init__(self):
pass;
def sum(self, x, y):
return x + y;
f = Functions();
print(f[0](1,2));
不,这不是我的代码的工作原理,但这只是一个示例
[基本上,我需要一种在最后一行打印3的方法,有点像从数字索引Class函数的方法。 (如果可能的话,我想要一个Pythonic解决方案)
我曾考虑过手动设置“接线”来执行此操作,但这会很烦人,因为我将不断添加新功能。
有什么魔术方法吗?我非常确定__getitem__
是解决此问题的好资源,但我发现自己无权将其用法包装在此问题上。
感谢您,任何帮助都是宝贵的。
基于此question的答案之一,您可以执行此操作:
f = Functions()
funcs = [func for func in dir(Functions) if callable(getattr(Functions, func)) and func.find('__') == -1]
print(getattr(Functions, funcs[0])(f, 1, 2))
或者您也可以像上面提到的那样使用__getitem__
将其包装在类中:
class Functions():
def __init__(self):
pass;
def __getitem__(self, i):
funcs = [func for func in dir(Functions) if callable(getattr(Functions, func)) and func.find('__') == -1]
return getattr(self, funcs[i])
def sum(self, x, y):
return x + y;
这些方法的唯一问题是,它将不保留函数定义的原始顺序,而是按字母顺序排列