TypeError:object()在定义__new__后不带参数

时间:2016-01-13 21:51:47

标签: python python-3.x

我真的不知道这个小代码中的错误在哪里:

class Personne:
    def __init__(self, nom, prenom):
        print("Appel de la méthode __init__")
        self.nom = nom
        self.prenom = prenom

    def __new__(cls, nom, prenom):
        print("Appel de la méthode __new__ de la classe {}".format(cls))
        return object.__new__(cls, nom, prenom)

personne = Personne("Doe", "John")

上面的代码给出了错误:

Traceback (most recent call last):
  File "/home/bilal/Lien vers python/21_meta_classes/1_instanciation.py", line 21, in <module>
    personne = Personne("Doe", "John")
  File "/home/bilal/Lien vers python/21_meta_classes/1_instanciation.py", line 14, in __new__
    return object.__new__(cls, nom, prenom)
TypeError: object() takes no parameters

1 个答案:

答案 0 :(得分:28)

在Python 3.3及更高版本中,如果要覆盖__new____init__,则需要避免将任何额外的参数传递给您覆盖的object方法。如果您只覆盖其中一个方法,则允许将额外的参数传递给另一个方法(因为这通常在没有您帮助的情况下发生)。

因此,要修复您的课程,请更改__new__方法,如下所示:

def __new__(cls, nom, prenom):
    print("Appel de la méthode __new__ de la classe {}".format(cls))
    return object.__new__(cls) # don't pass extra arguments here!