Вызвать метод класса для массива объектов этого класса в Matlab легко:
Код: Выделить всё
A = [Class1(1), Class1(2)];
B = A.toClass2();
В Python это не может быть передано 1 к 1, потому что во второй строке интерпретатор будет искать метод toClass2() в классе List, но не найдет (->ошибка).
Я обнаружил, что эту проблему можно решить вне определения этого метода, на стороне пользователя, вызвав его в цикле for, распознавании списка, отображении функции или лямбда-функции или даже с помощью numpy.vectorize(), см. это.
Каждое из этих решений подразумевает более тяжелый синтаксис для пользователя сторона, и еще чего-то не хватает; что, если я хочу, чтобы метод Class1.toClass2() мог сам решать, как обрабатывать список нескольких объектов, полученных в качестве входных данных.
Например, метод Class1.Sum() будет логически суммировать все элементы, к которым он применяется. и вернуть один объект, тогда как другой, выполняющий какое-либо преобразование, например Class1.toClass2(), может также возвращать массив новых объектов.
В качестве альтернативы можно сделать так, чтобы метод toClass2() также принимал a List в качестве самостоятельного ввода и вызовите его явно во второй строке списка A, используя:
Код: Выделить всё
B = Class1.toClass2(A)
Кто-нибудь видит другое решение?
Может быть, есть один, использующий декораторы методов, декораторы классов или даже подклассы класса List.
Иначе, в более общем плане, как адаптировать это мышление проектирования архитектуры ООП программного обеспечения из массивов Matlab в Python Вселенная?
Подробнее здесь: https://stackoverflow.com/questions/790 ... -in-python