在python中重写类init的方法
当我调用在python中重写类init的方法,python,overriding,init,Python,Overriding,Init,当我调用mic.openTheMic(record_seconds=10)时,我想使用所有的类默认值,或者如果我想更改(一个或多个)参数,那么只需包含一个,例如,在这种情况下,record_seconds=10。有办法做到这一点吗 class myAudio(object): def __init__(self, chunk = 1024, format = pyaudio.paInt16, channels = 1, rate = 41000, record_secon
mic.openTheMic(record_seconds=10)
时,我想使用所有的类默认值,或者如果我想更改(一个或多个)参数,那么只需包含一个,例如,在这种情况下,record_seconds=10
。有办法做到这一点吗
class myAudio(object):
def __init__(self, chunk = 1024, format = pyaudio.paInt16, channels = 1,
rate = 41000, record_seconds = 5):
self.p = pyaudio.PyAudio()
self.CHUNK = chunk
self.FORMAT = format
self.CHANNELS = channels
self.RATE = rate
self.RECORD_SECONDS = record_seconds
def openTheMic(chunk = 1024, format = pyaudio.paInt16, channels = 1,
rate = 41000, record_seconds = 5):
q = myAudio(chunk = 1024, format = pyaudio.paInt16, channels = 1,
rate = 41000, record_seconds = 5)
q = myAudio()
stream = q.p.open(format = q.FORMAT,
channels = q.CHANNELS,
rate = q.RATE,
input = True,
output = True,
frames_per_buffer = q.CHUNK)
print ("***mic is open***")
for i in range(0, q.RATE / q.CHUNK * q.RECORD_SECONDS):
data = stream.read(q.CHUNK)
if __name__ == '__main__':
mic = myAudio()
mic.openTheMic(record_seconds = 10)
比如(未经测试的):
请注意,我将格式
更改为fmt
,以避免隐藏内置文件。此外,调用openTheMic
会永久更改实例属性值。如果你不想这样,可以这样:
class myAudio(object):
def __init__(self, chunk=1024, fmt=pyaudio.paInt16, channels=1, rate=41000, record_seconds=5):
self.p = pyaudio.PyAudio()
self.CHUNK = chunk
self.FORMAT = fmt
self.CHANNELS = channels
self.RATE = rate
self.RECORD_SECONDS = record_seconds
def openTheMic(self, **kwargs):
_chunk = kwargs.get('chunk', self.CHUNK)
_format = kwargs.get('fmt', self.FORMAT)
_channels = kwargs.get('channels', self.CHANNELS)
_rate = kwargs.get('rate', self.RATE)
_record_seconds = kwargs.get('record_seconds', self.RECORD_SECONDS)
stream = self.p.open(
format = _format,
channels = _channels,
rate = _rate,
input = True,
output = True,
frames_per_buffer = _chunk
)
print ("***mic is open***")
for i in range(0, _rate / _chunk * _record_seconds):
data = stream.read(_chunk)
if __name__ == '__main__':
mic = myAudio()
mic.openTheMic(record_seconds = 10)
您是否有理由在
openTheMic
方法中创建另一个myAudio
实例,而不只是使用self
?事实上,你创造了两个。我不明白问题所在。openTheMic()
的所有参数都是具有默认值的关键字参数,这意味着您只需在调用它时指定要覆盖的参数。
class myAudio(object):
def __init__(self, chunk=1024, fmt=pyaudio.paInt16, channels=1, rate=41000, record_seconds=5):
self.p = pyaudio.PyAudio()
self.CHUNK = chunk
self.FORMAT = fmt
self.CHANNELS = channels
self.RATE = rate
self.RECORD_SECONDS = record_seconds
def openTheMic(self, **kwargs):
_chunk = kwargs.get('chunk', self.CHUNK)
_format = kwargs.get('fmt', self.FORMAT)
_channels = kwargs.get('channels', self.CHANNELS)
_rate = kwargs.get('rate', self.RATE)
_record_seconds = kwargs.get('record_seconds', self.RECORD_SECONDS)
stream = self.p.open(
format = _format,
channels = _channels,
rate = _rate,
input = True,
output = True,
frames_per_buffer = _chunk
)
print ("***mic is open***")
for i in range(0, _rate / _chunk * _record_seconds):
data = stream.read(_chunk)
if __name__ == '__main__':
mic = myAudio()
mic.openTheMic(record_seconds = 10)