【发布时间】:2017-04-07 17:12:05
【问题描述】:
我想在 python 切片对象中包含一些元数据,同时添加变量来指示切片中每个元素的索引。元数据用于标记切片正在检索的每个元素。我知道还有其他可以使用的标记数据结构,但是在我的项目中,切片被预定义为 numpy 数组的一种下标,并在各个地方重复使用。所以,对我来说,找到一种方法来整合它是有意义的。
我正在考虑对slice 进行子分类,但显然它不能是subclassed,这在链接问题的答案中已明确解释。从那以后有什么变化吗?
我想做的是创建一个如下所示的类:
class Subscript:
def __init__(self, start, stop, step=None, labels=None):
self.labels = labels
self.slc = slice(start, stop, step)
for i, l in zip(range(start, stop, step), labels):
setattr(self, l, i)
并且能够像这样使用它:
sub = Subscript(0, 5, labels=['s0', 's1', 's2', 's3', 's4'])
list(range(10))[sub] # [0, 1, 2, 3, 4]
range(10)[sub.s0] # 0
有没有办法做到这一点而不必添加__call__ 方法来返回切片?不知何故,我对此表示怀疑,因为从sub 到__getitem__ 的数组或列表不知道如何处理这个问题。我知道我可能只是将这些信息修补到slice,但我想知道这种事情是否可以在课堂上完成。
目前,我正在分别定义 slice 和 slice 元素,例如:
sub = slice(0, 5)
s0, s1, s2, s3, s4 = range(5)
但是这种方法使得将多维数组的输出处理成字典变得更加困难,其中键是下标元素组合,在超过 1 个sub 和值是一维数组的情况下。
【问题讨论】:
-
请不要使用
exec动态设置属性,setattr更适合这个。另外,您的__init__没有self。 -
谢谢!忘了那个
标签: python arrays python-3.x slice subclassing