我正在尝试使从列表扩展的类 = 返回其自身的一部分而不是列表类型。我想这样做的原因是因为我有许多其他方法来操作 A 的实例。
我正在运行 python 2.7.3 假设我有:
class B():
def __init__(self, t, p):
self.t = t
self.p = p
class Alist(list):
def __init__(self, a_list_of_times = []):
for a_time in a_list_of_times:
self.append(a_time )
def __getslice__(self, i, j):
return super(Alist, self).__getslice__(i,j)
def plot_me(self):
pass
# other code goes here!
alist1 = Alist()
for i in range(0, 1000000):
alist1.append(B(i, i)) # yes ten million, very large list!
alist = alist1[1000:200000] # will return a list!
alist2 = Alist(alist) # will return Alist istance
问题是在制作变量 b 中看到的重新制作整个列表非常慢(与切片相比)。我想要做的只是将 alist 的类(当前为 list 类型)更改为 Alist
当我尝试:
alist.__class__ = Alist
>>>> TypeError: __class__ assignment: only for heap types.
这是非常可悲的,因为我可以为自己的对象类型做到这一点。我知道这不是标准的,但它已经完成了。 在 Python 中重新分类实例。
有没有解决的办法?此外,我显然简化了问题,我的对象更复杂一些。我主要发现将列表重新制作成我的 Alist 版本很慢。而且我需要经常做这个操作(不可避免)。有没有办法重制A?或解决此问题以使其加快速度?
在我的版本中,我可以在 0.07 秒内完成大约 10,000(我的切片大小)切片,而将其转换为我的 Alist 版本需要 3 秒。