【发布时间】:2018-07-27 20:58:11
【问题描述】:
我正在尝试编写一个继承自 Python list 类的类,并且有一个方法可以进行就地切片(修改了原始对象)。
这就是我所拥有的:
class MyList(list):
def __init__(self, mylist = []):
list.__init__(self)
self.extend(mylist)
def slice_it(self, x):
self = self[:x]
return self
然后我实例化它:
>>> mylist = MyList(mylist=[1,2,3,4,5])
>>> mylist
[1, 2, 3, 4, 5]
>>> mylist.slice_it(3)
[1, 2, 3]
>>> mylist
[1, 2, 3, 4, 5]
我希望最后一个输出是 [1, 2, 3]。有什么想法吗?
【问题讨论】:
-
分配给
self只是分配一个局部变量;像任何其他变量赋值一样,它不会改变你的对象。 -
@user2357112 我知道,但这是我能做的最好的。我也尝试不使用该行,但直接使用
return self[:x]。得到了同样的结果。 -
如果你没有编写
MyList类,而你只是有一个列表你想改变以产生你想要的最终状态,你会写什么代码来做到这一点?将该代码写入slice_it。 -
我认为在 Python 中就地修改列表不是一个好主意,无论是从便利性还是性能方面。
-
@liliscent 我不知道,在某些情况下它可能非常方便/高效。我不知道我是否会简单地将
list子类化以添加一个执行此操作的方法,但我怀疑 OP 坚持使用某种流畅的接口。
标签: python list class inheritance