我想通过继承它来扩展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是一个旧式的类)。
答案 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
的构造函数。