类实例属性无法调用?int与numpy.ndarray对象调用报错排查
解决'int object is not callable'和'numpy.ndarray object is not callable'错误
错误核心原因
你把实例属性(普通变量)当成方法来调用了。something.result是整数类型,something.index是numpy数组类型,它们都是存储数据的变量,不是可执行的函数,强行加()调用就会触发这类错误。
第一段代码问题分析与修复
原代码中,self.result = 1 + self.number是在类初始化时计算了一个整数,把它赋值给result属性。此时something.result就是个普通整数,你用something.result(1)试图把它当函数传参调用,必然报错。
两种修复方案
- 如果需要动态传参计算结果,把
result改成类方法:
class Do_something: def __init__(self, number=0): self.number = number def result(self, num): return 1 + self.number + num # 按需调整计算逻辑 something = Do_something() print(something.result(1)) # 输出2
- 如果只是初始化时计算固定值,直接访问属性即可(不要加括号):
class Do_something: def __init__(self, number=0): self.number = number self.result = 1 + self.number something = Do_something() print(something.result) # 输出1
第二段代码问题分析与修复
原代码中,self.index = self.arr[0]是把数组的第一行(一个numpy ndarray对象)赋值给index属性。something.index是数组变量,不是方法,加()调用自然报错。
两种修复方案
- 只是想获取初始化时的固定索引行,直接访问属性:
import numpy as np class Do_something_else: def __init__(self): self.arr = np.zeros([5,5]) self.index = self.arr[0] something = Do_something_else() print(something.index) # 输出[0. 0. 0. 0. 0.]
- 需要动态获取不同索引的行,把
index改成类方法:
import numpy as np class Do_something_else: def __init__(self): self.arr = np.zeros([5,5]) def index(self, idx): return self.arr[idx] something = Do_something_else() print(something.index(0)) # 输出[0. 0. 0. 0. 0.]
总结
你混淆了实例属性和实例方法的区别:
- 属性是存储数据的变量,直接访问即可,不需要加
() - 方法是可执行的函数,需要加
()并按需传参调用
内容的提问来源于stack exchange,提问作者thatoneguy
相关产品推荐
相关产品推荐

