在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)