You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

类实例属性无法调用?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)试图把它当函数传参调用,必然报错。

两种修复方案

  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
  1. 如果只是初始化时计算固定值,直接访问属性即可(不要加括号):
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是数组变量,不是方法,加()调用自然报错。

两种修复方案

  1. 只是想获取初始化时的固定索引行,直接访问属性:
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.]
  1. 需要动态获取不同索引的行,把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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 20:48:19