使用类来更改python类,Heap E

2024-04-20 12:05:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使从list扩展的class=返回自身的一个片段,而不是list类型。之所以要这样做,是因为我有许多其他方法来操作的实例。
我正在运行python2.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.

这是非常可悲的,因为我可以为我自己的对象类型这样做。 我知道这不是标准,但它已经完成了。 Reclassing an instance in Python。你知道吗

有办法吗?另外,我显然简化了问题,我的对象有点复杂。主要是我发现,重新制作列表到我的版本是缓慢的。我需要做这个手术很多(不可避免)。有办法翻拍一部电影吗?或者解决这个问题的方法来加快速度?你知道吗

在我的版本中,我可以在0.07秒内完成大约10000个(我的切片大小)切片,而将其转换为我的Alist版本需要3秒钟。你知道吗


Tags: 方法inself版本类型forreturninit
1条回答
网友
1楼 · 发布于 2024-04-20 12:05:14

UserList类(在python3中移动到collections)就是为此而设计的。它是一个list,但有一个data属性,您可以在其中存储底层list,而无需复制。你知道吗

from UserList import UserList

class Alist(UserList):
    def __init__(self, iterable, copy=True):
        if copy:
            super(Alist, self).__init__(iterable)

        else:
            self.data = iterable

    def plot_me(self):
        pass

相关问题 更多 >