Python中的自适应描述符

2024-06-25 23:01:55 发布

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

我想在返回代理对象的类上创建某种描述符。当索引时,代理对象检索对象的成员并对其应用索引。然后返回总和。在

例如

class NDArrayProxy:

    def __array__(self, dtype=None):
        retval = self[:]
        if dtype is not None:
            return retval.astype(dtype, copy=False)
        return retval


class ArraySumProxy(NDArrayProxy):

    def __init__(self, arrays):
        self.arrays = arrays

    @property
    def shape(self):
        return self.arrays[0].shape

    def __getitem__(self, indices):
        return np.sum([a[indices]
                       for a in self.arrays],
                      axis=0)

当我将实际数组作为成员变量时,此解决方案运行良好:

^{pr2}$

现在我已经将数组更改为Python描述符(cluster_signal实现了返回numpy数组的描述符协议):

^{3}$

这不起作用,因为append语句附加了描述符调用的结果。我需要的是附加一个绑定方法或类似的代理。修改我的解决方案的最好方法是什么?简而言之:变量basic_inexplanation_innumpy数组。它们现在是描述符。我想开发一些ArraySumProxy的版本,它可以处理描述符,而不需要实际的数组。在


Tags: 对象inselfnone代理returndef成员
1条回答
网友
1楼 · 发布于 2024-06-25 23:01:55

当你访问一个描述符时,它被计算出来,你只得到它的值。因为你的描述符并不总是返回同一个对象(我想你不能避免它?),您不想在初始化代理时访问描述符。在

避免访问它的最简单方法是记住它的名称,因此不要:

self.variable_evidence.arrays.append(self.basic_in)

你需要:

^{pr2}$

然后,当然,variable_evidence必须意识到这一点,并执行getattr(obj, name)来访问它。在

另一个选择是让描述符返回一个稍后计算的代理对象。我不知道你在做什么,但这可能是太多的代表,好品味。。。在

编辑

或者。。。您可以存储getter:

^{3}$

相关问题 更多 >