2017-03-03 26 views
-1

使用Python 2.7,下面的代码工作:Python 3中产生误差VS Python 2中使用装饰

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) 

输出:

I am a hex! 

使用Python 3.6,我得到以下错误:

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

如何使这个代码符合Python 3.6?

+0

你能给出完整的堆栈跟踪错误吗? – Nilesh

+1

Python 3没有'__hex__'方法。完全一样。这不是装饰问题;你可以在没有装饰器的情况下进行测试;-) –

回答

2

你不能。

在Python 3中,hex寻找__index__函数,返回整数。您不能使用hex来打印任意字符串。