报错 TypeError: func() missing 1 required positional argument: 'self'
时间: 2023-08-18 15:18:17 浏览: 317
这个错误是因为在调用 `a.func()` 时,没有将 `self` 参数传入。这是因为在将 `A.func` 赋值给 `a.func` 后,`a.func` 已经不是一个绑定方法了,而是一个函数对象,调用时需要手动传入 `self` 参数。修正后的代码如下:
```
class A:
def __init__(self,val):
self.val=val
def func(self):
print(self.val)
if __name__=='__main__':
a=A(1)
a.func=A.func
a.func(a)
```
这样就能正确输出 `1` 了。
相关问题
TypeError: benchmark_func() missing 1 required positional argument: 'funcnumber'
这个错误通常是因为你在调用 `benchmark_func()` 函数时,没有传递 `funcnumber` 这个参数。`benchmark_func()` 函数需要两个参数,一个是测试函数,另一个是测试函数的编号。请确保在调用 `benchmark_func()` 函数时,同时传递这两个参数,如下所示:
```python
benchmark_func(test_func, funcnumber)
```
其中,`test_func` 是你要测试的函数,`funcnumber` 是测试函数的编号。如果你仍然遇到问题,请检查你的代码,确保你正确地传递了这两个参数。
TypeError: guvectorize() missing 1 required positional argument: 'signature'
这个错误通常是由于 `guvectorize()` 函数的参数不正确引起的。`guvectorize()` 函数需要至少两个参数,第一个参数是要向量化的函数,第二个参数是函数签名。
请确保你提供了正确的函数签名作为 `guvectorize()` 函数的第二个参数。签名应该指定输入和输出数组的数据类型和维度。例如,如果你要向量化的函数具有以下签名:
```python
def my_func(a: np.ndarray, b: np.ndarray) -> np.ndarray:
...
```
那么你应该将以下签名提供给 `guvectorize()` 函数:
```python
@guvectorize(['(n), (n) -> (n)'], target='cuda')
def my_func_gpu(a, b, out):
...
```
在这个例子中,签名 `'(n), (n) -> (n)'` 指定了两个输入数组 `a` 和 `b`,以及一个输出数组 `out`,它们都是一维的(即 `n` 是数组的长度),并且它们的数据类型相同。你也可以使用其他数据类型和数组维度来定义你的函数签名。
阅读全文