如何从另一个方法正确调用一个方法

How to properly call one method from another method

如何在 python 中正确地从一个方法调用另一个方法。 在我想对这些数据进行排序并将其写入 .txt 后,我​​从 AWS S3 存储桶中获取了一些数据。

import boto3
import string
import json
import collections


def handler(event, context):
    print(f'Event: {event}')

    s3 = boto3.resource('s3')
    bucket = s3.Bucket(event["bucket"])

    for obj in bucket.objects.all():
        key = obj.key
        body = obj.get()['Body'].read()
        b = json.loads(body)
        c = WordCorrection.create_duplicated_words_file(b)
        # WordCorrection.create_duplicated_words_file(WordCorrection.word_frequency(
        #     WordCorrection.correct_words(b)))
        # WordCorrection.spell_words(WordCorrection.dict_spell_words(WordCorrection.unrecognized_words_from_textrtact(b)))

        return c
      


CONFIDENT_LEVEL = 98


class WordCorrection:
    def correct_words(data):
        spell = SpellChecker()
        correct_words_from_amazon = []
        for items in data['Blocks']:
            if items['BlockType'] == "WORD" and items['Confidence'] > CONFIDENT_LEVEL and {items["Text"]} != spell.known([items['Text']]):
                correct_words_from_amazon.append(items['Text'])
        correct_words_from_amazon = [''.join(c for c in s if c not in string.punctuation) for s in
                                     correct_words_from_amazon]

        return correct_words_from_amazon

    def word_frequency(self, correct_words_from_amazon):
        word_counts = collections.Counter(correct_words_from_amazon)
        word_frequency = {}
        for word, count in sorted(word_counts.items()):
            word_frequency.update({word: count})

        return dict(sorted(word_frequency.items(), key=lambda item: item[1], reverse=True))

    def create_duplicated_words_file(word_frequency):
        with open("word_frequency.txt", "w") as filehandle:
            filehandle.write(str(' '.join(word_frequency)))

我试图使用 self 但我看不到好的结果,并且出于我使用

的原因
WordCorrection.create_duplicated_words_file(WordCorrection.word_frequency(WordCorrection.correct_words(b)))

但我 100% 确定它不正确,还有另一种方法可以从另一个方法调用一个方法吗?

我认为你的问题是对 keywords/namespaces 模块与 classes 的误解造成的。

模块:

在 python、files are modules 中,因此当您在文件内部时,文件中到该点为止定义的所有函数都在“范围内”。所以如果我有两个这样的函数:

def func_foo():
    return "foo"
def func_bar():
    return func_foo() + "bar"

然后 func_bar() 将 return "foobar".

当您使用 class 关键字定义 class 时,它会定义一个新的 scope/namespace。使用单词 self 作为实例方法的第一个参数被认为是正确的(尽管在技术上不是必需的),这指的是调用该方法的实例。

例如:

class my_clazz:
    def method_foo(self):
        return "foo" 
    def method_bar(self):
        return self.method_foo() + "bar" 

然后如果我稍后在文件中:

example = my_clazz()
ret_val = example.method_bar()

ret_val 将是 "foobar"

也就是说,因为我在这个例子中并没有真正利用 object-oriented 编程功能,所以 class 定义在很大程度上是不必要的。

你的问题

所以对于你的问题,你的麻烦似乎是由似乎不必要地将你的函数包装在 class 定义中引起的。如果你摆脱了 class 定义 header 并且只是在模块中创建你的所有函数,你将能够使用我上面使用的调用技术。有关 Python 中 classes 的更多信息,我建议阅读 here