Мне нравится Python для относительного импорта между модулями и краткости кода. При выполнении операций с большим количеством наборов данных я бы использовал Python в качестве основного фреймворка, тогда тяжелые в вычислительном отношении части могли бы обрабатываться модулями plug and play, написанными на более быстрых языках, таких как FORTRAN.
В моем текущем состоянии яиметь пакет с именем sigmareader
, который по сути является классом;класс определен в __init__.py
, в то время как методы вызываются из соответствующих пакетов. Структура sigmareader
показана ниже:
sigmareader
├── __init__.py
├── _reader
│ ├── ...
├── ...
Чтобы прочитать мои данные, я создаю экземпляр sigmareader
и использую метод reader
. Считанные данные хранятся в подходящей форме в атрибуте self
экземпляра.
Само по себе это довольно сложная вычислительная задача. Теперь, когда данные прочитаны и сохранены, я хотел бы перейти к расчету продукта. Я предполагаю, что вычисление продукта будет одинаково сложным и вычислительно тяжелым, поэтому я хотел бы сделать его отдельным пакетом, называемым sigmaproduct
:
sigmaproduct
├── __init__.py
├── _cloudproduct
│ ├── ...
├── ...
Для расчета продукта требуется ввод данных чтения, которые хранятся в случае sigmareader
. Я вижу три способа сделать это.
Первый подход Сделать sigmaproduct
дочерним классом sigmareader
.
Для иллюстрации рабочего процесса:
sigmaproduct_ins = sigmaproduct()
for dataset in dataset_lst:
sigmaproduct_ins.reader(dataset) # storing read data in instance
sigmaproduct_ins.cloudproduct() # reading and storing cloudproduct in instance
...further operations
Второй подход Сделать sigmaproduct
независимым классом, который инициализируется с использованием экземпляра sigmareader
. Там, где этот экземпляр sigmareader
уже активировал свои методы;то есть он уже сохранил прочитанные данные под атрибутом self
.
Чтобы проиллюстрировать рабочий процесс:
sigmareader_ins = sigmareader()
for dataset in dataset_lst:
sigmareader_ins.reader(dataset) # storing read data in instance
sigmaproduct_ins = sigmaproduct(sigmareader_ins) # creating instance of sigmaproduct
sigmaproduct_ins.cloudproduct() # reading and storing cloudproduct in instance
...further operations
Третий подход Сделать sigmaproduct
независимым классом, он инициализируется как универсальный объект так же, как sigmareader
;т.е. его инициализация не зависит от набора данных. Вместо этого методы sigmaproduct
потребовали бы ввода экземпляра sigmareader
для вычисления продуктов.
Для иллюстрации рабочего процесса:
sigmareader_ins = sigmareader()
sigmaproduct_ins = sigmaproduct()
for dataset in dataset_lst:
sigmareader_ins.reader(dataset) #storing read data in instance
sigmaproduct_ins.cloudproduct(sigmareader_ins) #computing and storing data stored in sigmareader_ins
... futher operations
Со многими различнымиметоды в каждом пакете, я хотел бы как можно больше сохранить sigmareader
и sigmaproduct
как независимые классы, поэтому я предпочитаю не использовать Первый подход .
Однако, dataset_lst
содержит БОЛЬШОЕ число dataset
с, поэтому я ищу наиболее оптимальный в вычислительном отношении подход. Который лучший? Каковы плюсы и минусы каждого подхода? Есть ли другие, более оптимальные подходы, которые я упускаю?