Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python len()不';不起作用,但对于持有numpy数组的类,len不起作用_Python_Python 3.x_Python 2.7_Oop - Fatal编程技术网

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()
返回与正整数不同的任何内容。没有更多的话要说…有道理,虽然这意味着我将不得不重新考虑我的一些代码。。