我已经为optparse编写了一个子类Option
。OptionParser
我正在重写add_option
OptionParser 中的函数以使其解析新关键字。以下是我的代码。
from optparse import Option, OptionError, OptionParser
class MyOptionParser(OptionParser):
def add_option(self,*args,**kwargs):
##add the new keyword "deft". If deft="some value", kwargs[default] = deft
##else process args to get deft
if kwargs.has_key["deft"]:
newDef = kwargs["deft"]
del kwargs["deft"]
else:
newDef = process_args_for_deft(args)
if newDef!= None
kwargs["default"] = newDef
modOpt = OptionParser.add_option(self,*args,**kwargs)
class MyOption(Option):
def _set_opt_strings(self, largs, rargs, values):
#overridden method over here
现在,如果我这样做,它工作正常。
parser = MyOptionParser()
parser.add_option("-f", "--file", dest="filename",
help="write report to FILE", metavar="FILE", deft ="xyz")
但是,如果我这样做(我想这样做),它会给我一个错误: MyOption instance has no attribute ' getitem ' if def 没有指定并且如果def
指定它给我一个错误,说 no type like def
.
parser = MyOptionParser()
parser.add_option(MyOption("-f", "--file", dest="filename",
help="write report to FILE", metavar="FILE", def ="xyz"))
我认为问题是我在使用 MyOption (opts,args) 时传递了一个对象,因此它无法访问 args/kwargs。我该如何解决这个问题?