Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将类对象的所有方法的结果作为一个列表返回?_Python_List_Class_Methods - Fatal编程技术网

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}