add_option
basically directly calls the constructor for option_class
(which is a default argument to the OptionParser
constructor that defaults to optparse.Option
).
So, you should probably just override MyOption.__init__
instead (without overriding OptionParser.add_option
):
class MyOption(Option):
def __init__(self, *args, **kwargs):
if 'deft' in kwargs:
newDef = kwargs.pop('deft')
else:
newDef = process_args_for_deft(args)
if newDef is not None:
kwargs["default"] = newDef
Option.__init__(self, *args, **kwargs)
If you want to be able to support syntax like
parser.add_option("-f", "--file", dest="filename",
help="write report to FILE", metavar="FILE", deft ="xyz")
then just make sure to set option_class
when making your OptionParser
:
parser = MyOptionParser(option_class=MyOption)