在构造函数中使用**kwargs时出现意外的关键字参数

Leo*_*opd 12 python

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

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!?!??
Run Code Online (Sandbox Code Playgroud)

这失败了

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'
Run Code Online (Sandbox Code Playgroud)

当方法有时,它如何抱怨意外的关键字参数**kwargs

(Ubuntu上的Python 2.7.3)

Ry-*_*Ry- 19

def SubClass(BaseClass):
Run Code Online (Sandbox Code Playgroud)

是一个功能,而不是一个类.没有错误,因为BaseClass可能是参数名称,并且允许嵌套函数.语法很有趣,不是吗?

class SubClass(BaseClass):
Run Code Online (Sandbox Code Playgroud)

  • 呃,对.谢谢./我跑开并隐藏起来 (9认同)