所以我不知道如何在类中重载__getitem__
和__setitem__
运算符以进行双索引。我正在尝试遍历用户定义的实例属性,该属性是2元组的集合,例如self.coeffs = ((6,2),(5,5),(1,8))
,其中第一个索引是2元组,第二个索引是第一个或第二个2元组中的项目。对于上一个对象,self.coeffs[2][0]
将是1
。
我很确定我了解如何为单个索引设置方法,但是我不知道如何让Python考虑第二个索引调用。
这是我的课程的一部分(self.coeffs
是由用户定义的元组构成的实例属性):
该类首先调用索引运算符的位置:
`def __str__(self):
if self.__coeffs[0][1] == 0: #TypeError: 'int' object isn't subscriptable
return str((self.__coeffs)[0][0])`
我当前的索引运算符:
`def __getitem__(self, idx):
for t in self.__coeffs:
if t[1] == idx:
return t[0]
if idx not in [t[1] for t in self.__coeffs]:
return 0
def __setitem__(self, idx, value):
for t in self.__coeffs:
if t[1] == idx:
t[0] = value
if idx not in [t[1] for t in self.__coeffs]:
self.addterm(value, exp)`
此外,我必须为idx
使用单个参数__getitem__
,我只能传递单个参数。如果有人知道如何解决此问题或有任何建议,将不胜感激,谢谢。
答案 0 :(得分:0)
第一个__getitem__
返回的对象也需要实现__getitem__
。发生该错误的原因是,有一次您返回0
,它是一个整数,并且如错误所述:'int'对象不可下标。
更精确地回答您的问题。实现方式取决于存储的数据。
最简单的情况:二维数组
如果您将2d存储在班级中,则可以像这样返回它:
# self.data[[0,1],[0,1],[34,234,234,234]]
def __getitem__(self, idx):
return self.data[idx]
您必须确保始终返回另一个列表。
其他对象
如果要返回类的另一个对象,则该对象需要实现__getitem__
方法。
class A:
# self.data = [1,2,3,67]
def __getitem__(self, idx):
return self.data[idx]
class B:
# self.data = [A(), A(), A()]
def __getitem__(self, idx):
return self.data[idx]
__setitem__
函数同样适用