为类中的每个函数设置唯一标识符(如索引)

问题描述 投票:0回答:1

假设您有这个:

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__是解决此问题的好资源,但我发现自己无权将其用法包装在此问题上。

感谢您,任何帮助都是宝贵的。

python-3.x
1个回答
1
投票

基于此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;

这些方法的唯一问题是,它将不保留函数定义的原始顺序,而是按字母顺序排列

© www.soinside.com 2019 - 2024. All rights reserved.