python - 在对不是从 'super' 派生的 python 类进行子类化时使用 `object`(旧式?)

标签 python

我正在尝试从标准库模块 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/

相关文章:

python - 单击按钮时使用 flask-python 将 Mysql 数据保存为 CSV/Excel

python - Scrapy:如何提取 HTML 标签内的所有单词?

python - 我的属性 setter 有问题

python - While 循环在允许 if 语句运行之前要求输入两次

python - Pandas for 循环无法使用 iloc 正确更新行?

python - 当包装器具有实例变量时键入类装饰器

python - 将列表转换为字符串

python - Linux Jupyter笔记本: "The kernel appears to have died. It will restart automatically"

python - 将浮点型数据从 Arduino 发送到 Python

python - Python 2.6.4 中的 urllib2 : Any way to override windows hosts file?