我很困惑。我正在尝试创建一个不关心任何关键字参数的子类——只将它们按原样传递给超类,并显式设置构造函数所需的一个参数。以下是我的代码的简化版本:

class BaseClass(object):
    def __init__(self, required, optional=None):
        pass

def SubClass(BaseClass):
    def __init__(self, **kwargs):
        super(SubClass, self).__init__(None, **kwargs)

a = SubClass(optional='foo')  # this throws TypeError!?!??

这个失败了
leo@loki$ python minimal.py
Traceback (most recent call last):
  File "minimal.py", line 9, in <module>
    a = SubClass(optional='foo')
TypeError: SubClass() got an unexpected keyword argument 'optional'

当方法具有**kwargs时,它如何抱怨意外的关键字参数?
(Ubuntu上的python 2.7.3)

最佳答案

def SubClass(BaseClass):

是函数,而不是类。没有错误,因为BaseClass可能是参数名,并且允许嵌套函数。语法很有趣,不是吗?
class SubClass(BaseClass):

关于python - 在构造函数中使用** kwargs时出现意外的关键字参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13897896/

10-12 18:37