Python 类和其他参数作为方法的参数,其中方法定义为接受参数

Python 类和其他参数作为方法的参数,其中方法定义为接受参数,python,class,parameters,Python,Class,Parameters,我有下面的代码 from dejavu import Dejavu from dejavu.recognize import FileRecognizer, MicrophoneRecognizer djv = Dejavu(config) 识别文件中的音频 下面是来自dejavu/recognize.py的 我不理解如何识别类Filereognizer以及识别器定义为的文件名 def识别(自我,文件名): 并且仅将文件名作为参数。有人能解释一下它是如何工作的吗?它实际上是做什么的 感谢

我有下面的代码

from dejavu import Dejavu

from dejavu.recognize import FileRecognizer, MicrophoneRecognizer

djv = Dejavu(config)
识别文件中的音频 下面是来自dejavu/recognize.py的 我不理解如何识别类Filereognizer以及识别器定义为的文件名

def识别(自我,文件名):

并且仅将文件名作为参数。有人能解释一下它是如何工作的吗?它实际上是做什么的


感谢@daniel,这是我的后续问题

def recognize(self, recognizer, *options, **kwoptions):
    r = recognizer(self)
    return r.recognize(*options, **kwoptions)
这是Djavu类下的识别器,我认为行“r=recognizer(self)”中的“self”是使识别器(在Dejavu类下)可以接收FileRecognizer类作为参数的原因,对吗

这是dejavu(音频指纹软件)github提供的,链接如下:

djv
是DejaVu的一个实例,而不是识别器,因此您调用的是该类的识别方法,而不是您显示的方法。@DanielRoseman谢谢
djv
是DejaVu的一个实例,而不是识别器,因此您调用的是该类的识别方法,而不是您显示的方法。@DanielRoseman谢谢!
class BaseRecognizer(object):

    def __init__(self, dejavu):
        self.dejavu = dejavu
        self.Fs = fingerprint.DEFAULT_FS

    def _recognize(self, *data):
        matches = []
        for d in data:
            matches.extend(self.dejavu.find_matches(d, Fs=self.Fs))
        return self.dejavu.align_matches(matches)

    def recognize(self):
        pass  # base class does nothing


class FileRecognizer(BaseRecognizer):

    def __init__(self, dejavu):
        super(FileRecognizer, self).__init__(dejavu)

    def recognize_file(self, filename):
        frames, self.Fs, file_hash = decoder.read(filename, self.dejavu.limit)

        t = time.time()
        match = self._recognize(*frames)
        t = time.time() - t

        if match:
            match['match_time'] = t

        return match

    def recognize(self, filename):
        return self.recognize_file(filename)
def recognize(self, recognizer, *options, **kwoptions):
    r = recognizer(self)
    return r.recognize(*options, **kwoptions)