TypeError对象不接受任何参数

2024-10-01 11:39:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我只是想编写一个如何使用super__new__的代码。代码如下:

class Person(object):
    def __new__(cls, name, age):
        print('__new__called')
        return super(Person, cls).__new__(cls, name, age)
    def __init__(self, name, age):
        print('__init__called')
        self.name = name
        self.age = age
    def __str__(self):
        return('<Person:%s(%s)>'%(self.name, self.age))
if __name__ == '__main__':  
    piglei = Person("piglei", 24)
    print(piglei)

Python提出了一个TypeError,并对第4行object() takes no parameters进行了说明。你知道吗


Tags: 代码nameselfnewagereturnobjectinit
1条回答
网友
1楼 · 发布于 2024-10-01 11:39:56

object.__new__不接受任何参数。您的super调用__new__将失败:

return super(Person, cls).__new__(cls, name, age)

因为你也把nameage传递到object.__new__。你知道吗

您不需要将它们传递给object;或者将__new__定义一起删除,或者不向其传递任何参数:

return super(Person, cls).__new__(cls)

不管怎样,这里确实没有理由使用__new__,但我猜你在做实验。如果是,请注意,也可以在super中删除Personcls,并使用它的零参数形式,即:

return super().__new__(cls)

相关问题 更多 >