2014-12-11 2 views
0

Что не так с кодом?Классы и методы в Python (методы и атрибуты, разделенные определениями)

from pyaudio import * 

class sphinx(): 
    def __init__(self, samprate=16000): 
     self.recorder(samprate) 

    def recorder(self, samprate): 
     audio = PyAudio() 
     recorder = audio.open(rate=samprate, channels=1, format=paInt16, input=True, frames_per_buffer=1024) 
     return recorder 

    def start(self): 
     in_speech_bf = True 
     self.recorder.start_stream() 
     ... 

decoder = sphinx() 
decoder.start() 

возвращает Python:

Traceback (most recent call last): 
    File "decoder.py", line 58, in <module> 
     decoder.start() 
    File "decoder.py", line 28, in start 
     self.recorder.start_stream() 
AttributeError: 'function' object has no attribute 'start_stream' 

PyAudio работает нормально, когда я не использую класс и методы.

Заранее спасибо.

ответ

0

Атрибуты данных и методы имеют одинаковые имена. Вам нужно дать им разные имена.

И если вы хотите создать атрибут или ссылку на атрибут, вам необходимо квалифицировать атрибут с помощью self., в противном случае он стал локальной переменной.

from pyaudio import * 

class sphinx: 

    def __init__(self, samprate=16000): 
     self.init(samprate) # renamed the method 

    def init(self, samprate): # renamed the method 
     audio = PyAudio() 
     self.recorder = audio.open(rate=samprate, channels=1, # qualify attribute 
            format=paInt16, input=True, 
            frames_per_buffer=1024) 
     return self.recorder 

    def start(self): 
     in_speech_bf = True 
     self.recorder.start_stream() 
     ... 
0

вы вызываете вашу функцию диктофона, а не функцию выхода магнитофона .. и ваша функция рекордер не имеет метод start_stream() ..

попробовать это:

def start(self): 
    in_speech_bf = True 
    rec = self.recorder() 
    rec.start_stream() 
+0

Или просто : 'self.recorder(). start_stream()' – sebastian

Смежные вопросы