【发布时间】:2019-08-12 21:44:43
【问题描述】:
我有一个对象,其中包含一个名为_X 的大型数据表。各种长度的数据示例在_X 中端到端堆叠,我命名为_INDEX 的另一个表对示例编号的映射进行编码 -> 示例所在_X 中的范围。
我想要的是定义一个名为X 的属性,其中包含__getitem__ 和__setitem__,这样我就可以使用X[i,j] 访问ith 示例的jth 元素。这是为了避免到处乱写像self._X[self._INDEX[i]:self._INDEX[i+1]][j] 这样令人困惑的冗长行。
我可以使用正确的 __getitem__ 和 __setitem__ 创建一个包装类,然后从我的 @property 函数中返回它,但我宁愿不必这样做。
【问题讨论】:
-
该属性实际返回什么?属性本身不需要定义
__getitem__,只需要定义属性返回的类。 -
即
foo.X[3,4]真的是type(foo).X.fget(foo)[3,4];无论X.fget返回什么都会被索引,而不是X本身。 -
如果您编写一个名为
X的函数,其中包含一个冗长的行,则其余代码只需调用a.X(i,j)。为什么那行不通?你不能避免写一次冗长的行。不需要任何属性或特殊方法。 -
这让我很欣赏 JavaScript,在那里我总是可以覆盖任何绑定的方法。
-
我不希望它成为一个函数,尽管它会有效地做同样的事情。我希望它看起来像对用户的正确索引。这是几个表之一,我可以在没有任何特殊功能的情况下公开其他表。为了对称,我希望它的行为就像其中之一。
标签: python properties