这是我最小的工作示例:
class One:
def __init__(self, arr):
self.arr = arr
def __len__(self):
return np.array([len(self.arr)]).astype(np.int8)
def size():
return self.__len__()
class Two(One):
def __init__(self, arr):
super().__init__(arr)
# Create an instance of the second class
a = Two(np.array([0.4, 0.6]))
# I can call a.size()
print("a.size(): ", a.size())
# I can call a.__len__()
print("a.__len__(): ", a.__len__())
# I cannot call len(a)
print("len(a): ", len(a))
所以基本上我有一个类One
,它有一个构造函数__init__
,一个方法__len__
应该实现len(One)
,最后是另一个叫做size
的方法,调用__len__
方法。
如您所见,我可以轻松地致电a.__len__()
和a.size()
,但不能致电len(a)
,因为我得到了:
TypeError: only integer scalar arrays can be converted to a scalar index
我尝试调试,直到一切顺利,直到我得到一个错误。
答案 0 :(得分:3)
如评论中所述,您会发现here如下:
__len__()
应该返回对象的长度,即> = 0的整数。
目前尚不清楚len()
会返回什么内容,但是此代码可以很好地工作,例如:
class One:
def __init__(self, arr):
self.arr = arr
def __len__(self):
return len(self.arr)
def size(self):
return self.__len__()