Python 泡菜不';t为继承自“的类工作”;名为“双”;当覆盖“时”__新的;

Python 泡菜不';t为继承自“的类工作”;名为“双”;当覆盖“时”__新的;,python,python-3.x,python-3.5,pickle,namedtuple,Python,Python 3.x,Python 3.5,Pickle,Namedtuple,以下代码失败 从集合导入namedtuple 进口泡菜 Foo类(名为tuple(“\u Foo”,“a”,“b”)): 定义-新定义(cls,**kwargs): self=super() #一些自定义代码 回归自我 foo=foo(a=1,b=2) 酸洗.装载(酸洗.倾倒(foo)) 与 回溯(最近一次呼叫最后一次): 文件“bar.py”,第10行,在 酸洗.装载(酸洗.倾倒(foo)) TypeError:\uuuuu new\uuuuuu()接受1个位置参数,但给出了3个 如果我删

以下代码失败

从集合导入namedtuple
进口泡菜
Foo类(名为tuple(“\u Foo”,“a”,“b”)):
定义-新定义(cls,**kwargs):
self=super()
#一些自定义代码
回归自我
foo=foo(a=1,b=2)
酸洗.装载(酸洗.倾倒(foo))

回溯(最近一次呼叫最后一次):
文件“bar.py”,第10行,在
酸洗.装载(酸洗.倾倒(foo))
TypeError:\uuuuu new\uuuuuu()接受1个位置参数,但给出了3个
如果我删除新的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
实现,它就可以工作,但我希望在那里有一些。我需要如何更改
\uuuuu new\uuuu
的实现以避免出现错误


我正在运行Python 3.5。

原因很简单;通常,C API将内容作为位置参数而不是命名参数传递。因此,您只需为此提供
*args

from collections import namedtuple
import pickle

class Foo(namedtuple("_Foo", ["a", "b"])):
    def __new__(cls, *args, **kwargs):
        self = super().__new__(cls, *args, **kwargs)
        # some custom code
        return self

foo = Foo(a=1, b=2)
pickle.loads(pickle.dumps(foo))

原因很简单,;通常,C API将内容作为位置参数而不是命名参数传递。因此,您只需为此提供
*args

from collections import namedtuple
import pickle

class Foo(namedtuple("_Foo", ["a", "b"])):
    def __new__(cls, *args, **kwargs):
        self = super().__new__(cls, *args, **kwargs)
        # some custom code
        return self

foo = Foo(a=1, b=2)
pickle.loads(pickle.dumps(foo))