применять методы класса Python к списку экземпляров - PullRequest
0 голосов
/ 18 ноября 2018

Я недавно перешел из Matlab в Python и хочу перенести некоторый код Matlab в Python. Однако возникло препятствие.

В Matlab вы можете определить класс с его методами и создать nd-массивы экземпляров. Приятно то, что вы можете применять методы класса к массиву экземпляров, пока метод написан так, что он может работать с массивами. Теперь в 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). Теперь это простой пример, объясняющий, что я хочу сделать (последний класс будет иметь несколько числовых массивов в качестве переменных).

Каков наилучший способ получить такую ​​функциональность в Python? Причина, по которой я хочу это сделать, заключается в том, что он позволяет выполнять пакетные операции, и они делают класс более мощным. Единственное решение, которое я могу придумать, - это определить второй класс, который имеет список экземпляров первого класса в качестве переменных. Пакетная обработка должна быть реализована во втором классе.

спасибо!

1 Ответ

0 голосов
/ 18 ноября 2018

ОБНОВЛЕНИЕ:

В вашем комментарии я замечаю это предложение,

Например, функция, которая берет данные первого класса в списке и вычитает данные всехследующий класс:

Это можно решить с помощью функции уменьшить .

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)

ОТВЕТ НА ПРОИСХОЖДЕНИЕ:

Фактически, то, что вам нужно Список понятий .

Пожалуйста, позвольте мне показать вам код

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...