向ConfigParser的__init__添加参数

时间:2013-12-15 19:33:14

标签: python inheritance

我想通过继承它来扩展SafeConfigParser的一些功能:

class ExtendedConfigParser(SafeConfigParser):

    def __init__(self, *args, **kwargs):
        SafeConfigParser.__init__(self, *args, **kwargs)

..但是SafeConfigParser的init有问题:

    SafeConfigParser.__init__(self, *args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'config_file'

我可以通过删除kwargs中添加的kw参数来解决问题,但我想知道是否有更优雅的解决方案? (注意:似乎SafeConfigParser是一个旧式的类)。

1 个答案:

答案 0 :(得分:1)

我假设您继承自Python的SafeConfigParser,并且您试图像这样实例化ExtendedConfigParser

cfg_parser = ExtendedConfigParser(config_file='my_file.cfg')

如果是这种情况,那么SafeConfigParser没有任何名为config_file的关键字参数,这是错误的来源。

python中的函数声明允许您指定参数,关键字参数,然后它允许通过*args**kwargs 指定未指定的参数和关键字参数。我假设您只想访问config_file中的ExtendedConfigParser SafeConfigParser中的而不是

您需要做的就是更改__init__中的ExtendedConfigParser参数:

class ExtendedConfigParser(SafeConfigParser):

    def __init__(config_file='', *args, **kwargs):
        self.config_file = config_file
        SafeConfigParser.__init__(self, *args, **kwargs)

这允许您为ExtendedConfigParser指定任何所需参数,然后将任何其他参数传递给SafeConfigParser的构造函数。