Maison >développement back-end >Tutoriel Python >Pouvez-vous remplacer les méthodes spéciales de Python directement sur les instances ?
Remplacement des méthodes spéciales sur les objets d'instance
En Python, les méthodes spéciales dont les noms sont entourés de doubles traits de soulignement ne sont généralement pas invoquées sur les instances mais plutôt sur leurs cours. Il s'agit d'un détail d'implémentation de CPython, l'interpréteur standard. Par conséquent, il n'est pas possible de remplacer __repr__() directement sur une instance et d'attendre que l'implémentation personnalisée soit utilisée.
Par exemple, considérons le code suivant :
class A(object): pass def __repr__(self): return "A" from types import MethodType a = A() print(a) # Output: <__main__.A object at 0x0101C5D0> print(repr(a)) # Output: '<__main__.A object at 0x0101C5D0>'
Comme nous pouvons voyez, repr(a) ne donne pas le résultat attendu de "A."
Pour contourner cette limitation, il faut définir une nouvelle méthode qui appelle l'implémentation d'origine, comme suit :
class A(object): def __repr__(self): return self._repr() def _repr(self): return object.__repr__(self)
Maintenant, vous pouvez remplacer __repr__() sur une instance en remplaçant _repr():
setattr(a, "_repr", MethodType(my_repr, a, a.__class__))
où my_repr est l'implémentation personnalisée souhaitée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!