我正在转换旧的 Python 代码并用新样式类替换了一些类。问题是这破坏了替换的行为,__str__
我不知道为什么。
class OldStyle():
def __str__(self):
return 'original'
old = OldStyle()
print old
old.__str__ = lambda: 'modified'
print old
class NewStyle(object):
def __str__(self):
return 'original'
new = NewStyle()
print new
new.__str__ = lambda: 'modified'
print new
我期望
original
modified
original
modified
但我得到了
original
modified
original
original
也就是说,__str__
没有正确替换为新样式。打印new.__str__
正确返回新的 lambda,但str(new)
仍不调用它。我认为这是一些方法查找缓存问题,但即使该对象以前从未打印过,也会发生这种情况。
为什么会这样?我从来没有听说过这种行为差异,它只发生在__str__
,其他方法被替换得很好。