在实例列表上应用python类方法

时间:2018-11-18 08:53:50

标签: python list matlab class

我最近从Matlab转到了Python,并想将一些Matlab代码转移到Python。但是,障碍物突然出现了。

在Matlab中,您可以使用其方法定义一个类并创建实例的nd-arrays。令人高兴的是,只要编写了方法,您就可以将类方法应用于实例数组,以便可以处理数组。现在在Python中,我发现这是不可能的:将类方法应用于实例列表时,它将找不到该类方法。下面是我如何编写代码的示例:

class testclass(): 
   def __init__(self, data):
      self.data = data
   def times5(self):
      return testclass(self.data * 5)

classlist = [testclass(1), testclass(10), testclass(100)]
times5(classlist)

这将在times5(classlist)行上给出错误。现在,这是一个简单的示例,解释了我要做什么(最终的类将有多个numpy数组作为变量)。

在Python中获得这种功能的最佳方法是什么?我想要这样做的原因是因为它允许批处理操作,并且它们使类更强大。我能想到的唯一解决方案是定义一个第二类,该第二类具有作为变量的第一类实例的列表。然后,需要在第二个类中实现批处理。

谢谢!

1 个答案:

答案 0 :(得分:0)

更新:

在您的评论中,我注意到了这句话,

  

例如,一个函数获取列表中第一类的数据并减去所有后续类的数据。

这可以通过reduce函数来解决。

class testclass():
   def __init__(self, data):
      self.data = data
   def times5(self):
      return testclass(self.data * 5)

from functools import reduce
classlist = [x.data for x in [testclass(1), testclass(10), testclass(100)]]
result = reduce(lambda x,y:x-y,classlist[1:],classlist[0])
print(result)

原始答案:

实际上,您需要的是List Comprehensions

请让我告诉您代码

class testclass(): 
   def __init__(self, data):
      self.data = data
   def times5(self):
      return testclass(self.data * 5)

classlist = [testclass(1), testclass(10), testclass(100)]
results = [x.times5() for x in classlist]
print(results)