Python 如何将类对象的所有方法的结果作为一个列表返回?
如何将类对象的所有方法的结果作为一个列表返回Python 如何将类对象的所有方法的结果作为一个列表返回?,python,list,class,methods,Python,List,Class,Methods,如何将类对象的所有方法的结果作为一个列表返回 class Example(object): def Calc1(self): return 1 def Calc3(self): return 2 def Calc5(self): return 3 Desired_Result = [1,2,3] 我不想使用这样的常用方法: Desired_Result = [Example().Calc1(),Example().Calc3(),Exampl
class Example(object):
def Calc1(self):
return 1
def Calc3(self):
return 2
def Calc5(self):
return 3
Desired_Result = [1,2,3]
我不想使用这样的常用方法:
Desired_Result = [Example().Calc1(),Example().Calc3(),Example().Calc5()]
我希望函数是可伸缩的,因为类可以有十个或数百个方法,这样我就不必键入每个方法
此外,还可以获得方法名称的额外积分
Desired_Result2 = ['Calc1','Calc3','Calc5']
尝试:
请注意,上面的最后一行仅适用于采用单个参数(实例)的方法。您可以按如下方式将名称与方法的结果结合起来:
print method_results
{'Calc1': 1, 'Calc3': 2, 'Calc5': 3}
以及这些方法的结果:
print [v() for v in method_results.values()]
[1, 2, 3]
注意(现在编辑)艾马克的答案。我认为这个答案是最好的。不过,为了记录在案,我最初提出这是另一个可行(现在不那么可取)的选择:
>>> e = Example() # create a generic instance
>>> methods = {k: v for k, v in Example.__dict__.items() if hasattr(v, '__call__')}
>>> [v(e) for v in methods.values()]
[1, 2, 3]
>>> {k: v(e) for k, v in methods.items()} # will only work if all methods take only one argument, the instance
{'Calc1': 1, 'Calc3': 2, 'Calc5': 3}
请注意,这种方法(以及AMacK当前的方法)只适用于需要一个参数(实例)的方法。如果这些方法有参数怎么办?我还不关心参数,因为我目前只对没有参数的方法感兴趣。但是,如果有一种方法可以对带参数的方法执行此操作,那将非常有用,但不确定这有多大可能。除非您希望获得每个方法的每个可能参数(可能是无限多个)的返回值,否则这是不可能的。你这样做到底想达到什么目的?也许有更好的方法。我更喜欢这种方法,但我认为你需要进一步采取这种方法。OP需要每个方法的输出。也就是说,OP需要名称和
[1,2,3]
。请尝试这样做,除了您已有的方法之外:方法={m[0]:m[1]在inspect.getmembers(instance)if inspect.ismethod(m[1])}
{k:v()表示方法中的k,v.items()}
如果您对我的修改不满意,请随意撤消我的编辑。
>>> e = Example() # create a generic instance
>>> methods = {k: v for k, v in Example.__dict__.items() if hasattr(v, '__call__')}
>>> [v(e) for v in methods.values()]
[1, 2, 3]
>>> {k: v(e) for k, v in methods.items()} # will only work if all methods take only one argument, the instance
{'Calc1': 1, 'Calc3': 2, 'Calc5': 3}