TypeError: object() takes no parameters after defining __new__
I really don't get where the error is in this little piece of code:
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")
It is giving me the error:
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
In Python 3.3 and later, if you're overriding both __new__
and __init__
, you need to avoid passing any extra arguments to the object
methods you're overriding. If you only override one of those methods, it's allowed to pass extra arguments to the other one (since that usually happens without your help).
So, to fix your class, change the __new__
method like so:
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!