Python len()不';不起作用,但对于持有numpy数组的类,len不起作用
以下是我的最小工作示例:Python len()不';不起作用,但对于持有numpy数组的类,len不起作用,python,python-3.x,python-2.7,oop,Python,Python 3.x,Python 2.7,Oop,以下是我的最小工作示例: 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)
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
,它有一个构造函数\uuuu init\uuuu
,一个方法\uu len\uuuuu
,应该实现len(One)
,最后还有一个名为size
的方法,它只调用\uu len uu
方法
如您所见,我可以很容易地调用a.\uu len\uu()
和a.size()
,但我不能调用len(a)
,因为我得到:
TypeError: only integer scalar arrays can be converted to a scalar index
我尝试过调试,直到最后一切都很顺利,只是我刚刚得到一个错误。如评论中所述,您会发现:
\uuu len\uu()
应返回对象的长度,一个整数>=0
不清楚len()
将返回什么,但此代码运行良好,例如:
class One:
def __init__(self, arr):
self.arr = arr
def __len__(self):
return len(self.arr)
def size(self):
return self.__len__()
如评论中所述,您会发现:
\uuu len\uu()
应返回对象的长度,一个整数>=0
不清楚您希望通过len()
)返回什么,但此代码工作良好,例如:
class One:
def __init__(self, arr):
self.arr = arr
def __len__(self):
return len(self.arr)
def size(self):
return self.__len__()
. 你想实现什么?如果你想看一看,我正在GitHub()上做这个项目。基本上,我想实现一个概率表类。此类将numpy数组作为属性保存。我想做的就是,如果你将类
Array
实例化为a=Array([1,2],np.Array([0.4,0.6],[0.3,0.7])`那么通过调用len(a)
你将得到np.Array的形状([0.4,0.6],[0.3,0.7])
为什么不实现.shape
属性呢?你不能这样做len
强制它返回一个int
。如果它不返回int
,那么解释器将调用对象的\uuuuuuuuuuu
方法(如果存在)。您看到的错误是因为numpy array\uuuuu index\uuuu
方法拒绝将1元素数组转换为整数。。你想实现什么?如果你想看一看,我正在GitHub()上做这个项目。基本上,我想实现一个概率表类。此类将numpy数组作为属性保存。我想做的就是,如果你将类Array
实例化为a=Array([1,2],np.Array([0.4,0.6],[0.3,0.7])`那么通过调用len(a)
你将得到np.Array的形状([0.4,0.6],[0.3,0.7])
为什么不实现.shape
属性呢?你不能这样做len
强制它返回一个int
。如果它不返回int
,那么解释器将调用对象的\uuuuuuuuuuu
方法(如果存在)。您看到的错误是因为numpy array\uuuuu index\uuuu
方法拒绝将1元素数组转换为整数。基本上我想返回arr.shape
。但是我想返回一个numpy数组,而不是返回一个元组。如果你想要一个数组形状,实现你自己的方法。不要滥用(或违反)\uuu len\uu
协议。不能使用len()
返回与正整数不同的任何内容。没什么要说的了……有道理,尽管这意味着我必须重新考虑我的一些代码……基本上我想返回arr.shape
。但是我想返回一个numpy数组,而不是返回一个元组。如果你想要一个数组形状,实现你自己的方法。不要滥用(或违反)\uuu len\uu
协议。不能使用len()
返回与正整数不同的任何内容。没有更多的话要说…有道理,虽然这意味着我将不得不重新考虑我的一些代码。。