我正在尝试重载字符串内置的一些方法.我知道没有真正合法的用例,但这种行为仍然让我感到烦恼,所以我想得到一个解释这里发生的事情:
使用Python2和forbiddenfruit
模块.
>>> from forbiddenfruit import curse
>>> curse(str, '__repr__', lambda self:'bar')
>>> 'foo'
'foo'
>>> 'foo'.__repr__()
'bar'
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,该__repr__
函数已成功重载,但在我们要求表示时实际上并未调用.这是为什么?
那么,你将如何做到预期的行为:
>>> 'foo'
'bar'
Run Code Online (Sandbox Code Playgroud)
没有关于设置自定义环境的限制,如果重建python是它所需要的,那就这样吧,但我真的不知道从哪里开始,我仍然希望有一个更简单的方法:)