【问题标题】:TypeError object takes no parametersTypeError 对象不带参数
【发布时间】:2017-01-12 17:50:05
【问题描述】:

我只是想编写如何使用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

【问题讨论】:

    标签: python python-3.x class


    【解决方案1】:

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

    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)
    

    【讨论】:

      猜你喜欢
      • 2016-08-18
      • 1970-01-01
      • 1970-01-01
      • 2014-07-30
      • 1970-01-01
      • 2022-11-22
      • 2019-07-07
      • 2013-09-25
      • 1970-01-01
      相关资源
      最近更新 更多