2017-03-03 1 views
-1

En utilisant Python 2.7, le code suivant fonctionne:Python 3 génère l'erreur vs Python 2 en utilisant décoratrice

def AddHex(old_class): 
    old_class.__hex__ = lambda self: 'I am a hex!' 
    return old_class 

@AddHex 
class AClass(object): 
    """'Empty' class""" 
    pass 

a = AClass() 
print hex(a) 

sortie:

I am a hex! 

En utilisant Python 3.6, je reçois le texte suivant erreur:

TypeError: 'AClass' object cannot be interpreted as an integer

Comment rendre ce code compatible avec Python 3.6?

+0

Pouvez-vous donner full stacktrace pour erreur? – Nilesh

+1

Python 3 n'a pas de méthode '__hex__'. Du tout. Ce n'est pas un problème de décorateur; vous auriez pu tester cela sans le décorateur ;-) –

Répondre

2

Vous ne pouvez pas.

En Python 3, hex recherche une fonction __index__ qui renvoie un entier. Vous ne pouvez pas utiliser hex pour imprimer une chaîne arbitraire.