Как уменьшить количество вызываемых параметров в методах?

У меня есть класс, и в этом классе есть метод, который вызывает несколько методов в нем.

Но проблема, с которой я столкнулся сейчас, заключается в том, что когда метод с несколькими методами в нем имеет дублирующий параметр.

И когда я вызываю метод с несколькими методами в нем, он возвращает пустой список:[].

Итак, это метод с несколькими методами в нем:

 def show_extracted_data_from_file(self,  file_name):
        self.extractingText.extract_text_from_image(file_name)
        total_fruit = self.filter_verdi_total_number_fruit()
        fruit_name = self.filter_verdi_fruit_name()
        fruit_total_cost = self.filter_verdi_total_fruit_cost(file_name)

        return "\n".join("{} \t {} \t {}".format(a, b, c) for a, b, c in zip(total_fruit, fruit_name, fruit_total_cost))

и это метод: filter_verdi_total_fruit_cost:

   def filter_verdi_total_fruit_cost(self, file_name):
        locale.setlocale(locale.LC_ALL, locale='Dutch')
        self.extractingText.extract_text_from_image(file_name)
        return [
            locale.atof(items[-1]) for items in (
                token.split() for token in file_name.split('\n')
            ) if len(items) > 2 and items[1] in self.extractingText.list_fruit
        ]

этот метод возвращает следующие данные:

[123.2, 2772.0, 46.2, 577.5, 69.3, 3488.16, 137.5, 500.0, 1000.0, 2000.0, 1000.0, 381.25]

Вы видите, что я вызываю два раза имя_файла.

и поэтому когда я вызываю метод show_extracted_data_from_file в views.py:

if uploadfile.image.path.endswith('.pdf'):
                    content = filter_text.show_extracted_data_from_file(uploadfile.image.path)
                    print(content)

выдает пустой список: []

Вопрос: как я могу уменьшить параметр имя_файла, чтобы он возвращал правильные результаты?

вот мои два других метода, которые я вызываю в комбинированном методе:

  def filter_verdi_total_number_fruit(self):
        regex = r"(\d*(?:\.\d+)*)\s*\W+(?:" + '|'.join(re.escape(word)
                                                       for word in self.extractingText.list_fruit) + ')'
        return re.findall(regex, self.extractingText.text_factuur_verdi[0])

    def filter_verdi_fruit_name(self):
        regex = r"(?:\d*(?:\.\d+)*)\s*\W+(" + '|'.join(re.escape(word)
                                                       for word in self.extractingText.list_fruit) + ')'
        return re.findall(regex, self.extractingText.text_factuur_verdi[0])

@AndrewRyan имеет правильную идею

Предполагаю, что вызов extract_text_from_image просто добавляет атрибут list_fruit
. Вы можете пойти двумя путями, из того, что вы комментируете, вы, вероятно, просто пойдете с #1... но я дал #2 как другой вариант на случай, если вы когда-нибудь захотите вызвать filter_verdi_total_fruit_cost сам по себе

Путь 1, просто удалите его.

  • Примечание: filter_verdi_total_fruit_cost вызывается только из show_extracted_data_from_file
  • .
def show_extracted_data_from_file(self,  file_name):

    # extract text
    #  Note: stores data in `self.extractingText.list_fruit`
    self.extractingText.extract_text_from_image(file_name)

    total_fruit = self.filter_verdi_total_number_fruit()
    fruit_name = self.filter_verdi_fruit_name()
    fruit_total_cost = self.filter_verdi_total_fruit_cost()

    return "\n".join("{} \t {} \t {}".format(a, b, c) for a, b, c in zip(total_fruit, fruit_name, fruit_total_cost))

def filter_verdi_total_fruit_cost(self):
    # Note: `self.extractingText.list_fruit` should be already defined

    locale.setlocale(locale.LC_ALL, locale='Dutch')
    return [
        locale.atof(items[-1]) for items in (
            token.split() for token in file_name.split('\n')
        ) if len(items) > 2 and items[1] in self.extractingText.list_fruit
    ]

Путь 2, Проверьте, извлечен ли он уже - если нет, извлеките; если да, продолжайте

  • Примечание: если вы хотите просто позвонить filter_verdi_total_fruit_cost
def show_extracted_data_from_file(self,  file_name):

    # extract text
    #  Note: stores data in `self.extractingText.list_fruit`
    self.extractingText.extract_text_from_image(file_name)

    total_fruit = self.filter_verdi_total_number_fruit()
    fruit_name = self.filter_verdi_fruit_name()
    fruit_total_cost = self.filter_verdi_total_fruit_cost(file_name)

    return "\n".join("{} \t {} \t {}".format(a, b, c) for a, b, c in zip(total_fruit, fruit_name, fruit_total_cost))

def filter_verdi_total_fruit_cost(self, file_name):
    locale.setlocale(locale.LC_ALL, locale='Dutch')

    if not hasattr(self, 'list_fruit'):
        # file hasn't been extracted yet.. extract it
        #  Note: stores data in `self.extractingText.list_fruit`
        self.extractingText.extract_text_from_image(file_name)

    return [
        locale.atof(items[-1]) for items in (
            token.split() for token in file_name.split('\n')
        ) if len(items) > 2 and items[1] in self.extractingText.list_fruit
    ]
Вернуться на верх