为什么下面的代码给出了错误?

class Foo:
    def __new__(cls, *args, **kwargs):
        print("Creating Instance")
        instance = super(Foo, cls).__new__(cls,*args, **kwargs)
        return instance

    def __init__(self, a, b):
        self.a = a
        self.b = b

z= Foo(2,3)

下面给出的错误是

TypeError: object.__new__() takes exactly one argument (the type to instantiate)

推荐答案

    instance = super(Foo, cls).__new__(cls,*args, **kwargs)

这是正确的.然而,you负责首先删除类引入的参数,这样当最终调用object.__new__时,*args**kwargs都是空的.

你的代码应该是

class Foo:
    def __new__(cls, a, b, *args, **kwargs):
        print("Creating Instance")
        instance = super(Foo, cls).__new__(cls, *args, **kwargs)
        return instance

    def __init__(self, a, b, *args, **kwargs):
            super().__init__(*args, **kwargs)
            self.a = a
            self.b = b

这个定义将删除args中的新参数ab,然后将其传递给MRO的下一个用户.__init__也一样.

Python-3.x相关问答推荐

在Python中从mySQL获取多行

这是重命名极地df列的最好方式吗?

为什么我在BLE中的广告代码在发送包裹之间需要大约1秒

我正在try 从 10*3 矩阵中删除随机值并将其变为 10*2 矩阵

在 sum() 中将字符串转换为 int (或 float)

为什么 get_form 方法中小部件的更改没有反映 Django 管理站点中的更改

如何立即从asyncio.Task获取异常?

基于Pandas列动态创建分箱,以使观测值数量或计数占总计数的1%.

有没有办法使用 python opencv 计算与图像的白色距离

正则表达式:匹配字符串中的分隔符(字母和特殊字符)以形成新的子字符串

获取比较多列的最大值并返回特定值

将字符串表示与使用整数值的枚举相关联?

为什么 Django South 1.0 使用 iteritems()?

pysftp vs. Paramiko

django - 值更改后自动更新日期

无论如何我可以在 Google colaboratory 中下载文件吗?

尾部斜杠的 FastAPI 重定向返回非 ssl 链接

注册 Celery 基于类的任务

print(... sep='', '\t' ) 是什么意思?

如何从 seaborn / matplotlib 图中删除或隐藏 x 轴标签