报错 TypeError: func() missing 1 required positional argument: 'self'
时间: 2023-08-18 11:18:17 浏览: 410
这个错误是因为在调用 `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'
这个错误通常出现在使用 Python 的 timeit 模块时,其中 benchmark_func() 函数缺少一个位置参数 "funcnumber"。
在 timeit 模块中,可以使用 Timer 类来执行一些 Python 语句的计时操作。Timer 类的构造函数接受两个参数:stmt 和 setup。
stmt 参数是要执行计时的语句,可以是一个字符串或可调用对象。而 setup 参数是在执行语句之前运行的语句,也可以是一个字符串或可调用对象。
在使用 Timer 类时,可以在构造函数中传入一个可调用对象作为 stmt 参数,然后在执行时,使用 timeit() 方法来计时。在这种情况下,timeit() 方法会自动调用 benchmark_func() 函数,同时传递一个位置参数 funcnumber,表示当前执行的是第几次循环。
如果 benchmark_func() 函数没有定义接收 funcnumber 参数,就会出现 "TypeError: benchmark_func() missing 1 required positional argument: 'funcnumber'" 错误。
为了解决这个问题,你需要修改 benchmark_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` 是数组的长度),并且它们的数据类型相同。你也可以使用其他数据类型和数组维度来定义你的函数签名。
阅读全文
相关推荐
















