这看起来应该很简单:
我想要一个list
和其他任何list
一样,只是它有一个不同的.__str__
方法。
- 试图设置
object.__str__ = foo
会导致只读错误 - 试图子类化
list
意味着您需要某种方法将现有的list
转换为子类的实例。这需要手动复制所有属性(非常痛苦),或者以某种方式自动复制所有属性,我不知道该怎么做。 - 试图在
list
对象周围编写一个包装器意味着我必须找到某种方法将所有消息发送到包装对象,但使用自己的方法处理的.__str__
除外。不知道怎么做。
非常感谢任何替代方案或解决方案2或3。谢谢!
Tags:
此解决方案不使用包装器。如果通过add连接两个列表,则有效。任何修改列表本身的操作都将按预期工作。只有像:sorted,reveresed这样返回列表副本的函数才能返回原生python列表。另一方面,sort和reverse操作列表本身并保留类型。
如果要重写其他容器的
__str__
(例如tuple
),可以利用多重继承:您可以扩展list类并覆盖它:
编辑:删除了不正确的答案部分,该部分建议动态替换list对象上的
__str__
,这在Python列表的实现中是不允许的。相关问题 更多 >
编程相关推荐