我真的不知道这个小代码中的错误在哪里:
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
答案 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!