Le problème
TypeError: '...' object cannot be interpreted as an integer
Si vous lisez cet article, il y a de fortes chances que vous ayez pensé à quelque chose dans ce sens :
- Étant donné une classe personnalisée
My_Class
. Vous souhaitez remplacer le comportement duhex(x)
intégré fonction en Python lors de son appel sur unMy_Class
objetx
. - Vous connaissez la fonctionnalité des méthodes Dunder pour écraser le comportement personnalisé des fonctions intégrées.
- Vous concluez que la méthode dunder pour
hex()
est__hex__()
parce que, après tout, c'est comme ça que ça doit marcher, n'est-ce pas ? - Mauvais ! Si vous essayez de le faire, vous obtenez l'erreur suivante.
Le mauvais exemple :non !
class My_Class: def __hex__(self): # WRONG! return 42 x = My_Class() print(hex(x))
La sortie indique que quelque chose s'est mal passé :
Traceback (most recent call last): File "C:\Users\xcent\Desktop\code.py", line 7, in <module> print(hex(x)) TypeError: 'My_Class' object cannot be interpreted as an integer
Que faire ?
Comment pouvez-vous résoudre le TypeError: 'My_Class' object cannot be interpreted as an integer
?
Pour résoudre le TypeError lorsque vous essayez de remplacer le comportement du hex()
fonction utilisant le __hex__()
méthode est d'oublier le __hex__()
méthode et utilisez le __index__()
méthode à la place.
Le __index__()
renvoie une valeur entière associée à un objet donné. L'entier est alors automatiquement converti en un nombre hexadécimal.
Le bon exemple – Faites !
Voici comment cela fonctionne dans un exemple simple :
class My_Class: def __index__(self): # Correct! return 42 x = My_Class() print(hex(x)) # 0x2a
Au cas où vous vous poseriez des questions sur la sortie 0x2a
au lieu de ce que vous avez défini, c'est-à-dire 42
, l'entier 42 est converti en nombre hexadécimal 0x2a
. Voir ici :
>>> hex(42) '0x2a'
Hex de fond() - Pas un tour de magie
hex(integer)
intégré de Python la fonction prend un argument entier et renvoie une chaîne hexadécimale avec le préfixe "0x"
.