You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python类实例化出现意外关键字参数错误的解决求助

问题解决:字典解包未生效导致的参数错误

问题代码与报错

类C的问题代码

class C:
    def __init__(self,**kwargs):
        self.kwargs = kwargs

    def fit(...):
        ...
        c = self.learner(**self.kwargs)

learner类代码

class learner:
    def __init__(self, X):
        self.X = X

实例化与调用代码

kwargs={'X': X}
inst = C(kwargs=kwargs)
inst.fit(...)

报错信息

learner.__init__() got an unexpected keyword argument 'kwargs'

错误原因

你实例化C时使用了C(kwargs=kwargs),而C的__init__通过**kwargs接收关键字参数。这会导致传入的kwargs字典被包装成嵌套字典:self.kwargs = {'kwargs': {'X': X}}。当fit方法执行self.learner(**self.kwargs)时,实际是把kwargs={'X': X}作为关键字参数传给learner的__init__,但learner只接受X参数,因此触发错误。

修正方案

方法1:实例化时直接解包字典(推荐)

修改实例化C的代码,用**直接解包你的kwargs字典,让C的__init__正确接收字典内的键值对:

kwargs={'X': X}
inst = C(**kwargs)

此时self.kwargs的值为{'X': X},在fit方法里解包后会正确将X参数传给learner的__init__。

方法2:修改C的__init__参数(若需保留传入kwargs参数的形式)

如果必须以C(kwargs=kwargs)的形式实例化,可将C的__init__参数改为普通位置参数,而非**kwargs:

class C:
    def __init__(self, kwargs):
        self.kwargs = kwargs

    def fit(...):
        ...
        c = self.learner(**self.kwargs)

这样实例化时传入的kwargs字典会直接赋值给self.kwargs,后续解包可正常工作。

内容的提问来源于stack exchange,提问作者redbull_nowings

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 11:02:44