Realmente no entiendo dónde está el error en este pequeño código:
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")
Este código presentado arriba me está dando el error:
Traceback (most recent call last): File "/home/bilal/Lien vers python/21_meta_classes/1_instanciation.py", line 21, in 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
En Python 3.3 y __new__
posteriores, si reemplaza tanto a __new__
como a __init__
, debe evitar pasar argumentos adicionales a los métodos de object
que está reemplazando. Si solo anula uno de esos métodos, se le permite pasar argumentos adicionales al otro (ya que eso suele ocurrir sin su ayuda).
Entonces, para arreglar tu clase, cambia el método __new__
así:
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!