这是代码:
class Dummy(object):
def __init__(self, v):
self.ticker = v
def main():
def _assign_custom_str(x):
def _show_ticker(t):
return t.ticker
x.__str__ = _show_ticker
x.__repr__ = _show_ticker
return x
a = [Dummy(1), Dummy(2)]
a1 = [_assign_custom_str(t) for t in a]
print a1[1]
# print a1[1].__str__ # test to if orig __str__ is replaced
Run Code Online (Sandbox Code Playgroud)
我希望看到像这样的输出
2
Run Code Online (Sandbox Code Playgroud)
但是,相反,我看到了标准表示:
<__main__.Dummy object at 0x01237730>
Run Code Online (Sandbox Code Playgroud)
为什么?
agf*_*agf 14
只有在类型而不是对象上定义魔术方法时,才能保证魔术方法有效.
例如:
def _assign_custom_str(x):
def _show_ticker(self):
return self.ticker
x.__class__.__str__ = _show_ticker
x.__class__.__repr__ = _show_ticker
return x
Run Code Online (Sandbox Code Playgroud)
但请注意,这将影响所有Dummy对象,而不仅仅是您用于访问该类的对象.
| 归档时间: |
|
| 查看次数: |
917 次 |
| 最近记录: |