我正在尝试从标准库模块 optparser
继承 OptionParser
。 (Python 2.5.2)当我尝试它时,我得到了异常:
TypeError: super() argument 1 must be type, not classobj
查看OptionParser
,它不是派生自object
。所以我添加了 object
作为父类,(如下所示)并且 super
正常工作。
from optparse import OptionParser, Option
class MyOptionParser(OptionParser, object):
"""Class to change
"""
def __init__(self,
usage=None,
option_list=None,
option_class=Option,
version=None,
conflict_handler="error",
description=None,
formatter=None,
add_help_option=True,
prog=None,
epilog=None,
):
super(MyOptionParser, self).__init__(usage, option_list, option_class, version, conflict_handler, description, formatter, add_help_option, prog, epilog)
if __name__ == '__main__':
"""Run a quick test
"""
parser = MyOptionParser()
parser.add_option("-t", "--test", type="string", dest="test")
(options, args) = parser.parse_args()
print "The test option is: %s" % options.test
这是解决问题的正确方法吗?
最佳答案
是的,我不明白为什么它不起作用。您只需要在该 super 调用之前添加几个空格 - 正如现在所写的那样,它不是您自定义 init 方法的一部分。此外,您可能想要使用的快捷方式是 **kwargs - 如果您希望这样做,您可以在您的方法中进行 kwargs 键检查:
class MyOptionParser(OptionParser, object):
"""Class to change
"""
def __init__(self, **kwargs):
# You can limit kwargs keys here
super(MyOptionParser, self).__init__(**kwargs)
关于python - 在对不是从 'super' 派生的 python 类进行子类化时使用 `object`(旧式?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2023940/