Python类属性学习遇AttributeError:int对象无isSolvable属性求助
解决AttributeError: 'int' object has no attribute 'isSolvable'问题
嘿,我一眼就看到了问题所在,咱们一步步来拆解和解决:
错误原因分析
- 核心问题:你调用
a.isSolvable(...)的时候,这里的a是你用input()获取的整数,属于int类型,而isSolvable是HomogenEquation类的实例方法,只有这个类的实例才能调用它,整数对象当然没有这个方法啦! - 额外问题:你的类设计有点冗余——没必要给每个输入的数值都单独创建一个
HomogenEquation实例,应该把整个方程组的参数封装到同一个实例里;而且getXY也是类的实例方法,不能直接全局调用,必须通过实例来调用。
修正后的代码
我重新调整了类的设计,让它更贴合求解方程组的场景:
import numpy as np class HomogenEquation(): def __init__(self, a, b, c, d, e, f): # 把方程组的所有参数作为实例属性保存 self.a = a self.b = b self.c = c self.d = d self.e = e self.f = f def isSolvable(self): # 直接使用实例属性判断,不需要再传参 return (self.a * self.d) - (self.b * self.c) != 0 # 纠正逻辑:行列式不为0才有唯一解 def getXY(self): # 同样使用实例属性构建数组 x_matrix = np.array([[self.a, self.b], [self.c, self.d]]) y_vector = np.array([self.e, self.f]) try: solution = np.linalg.solve(x_matrix, y_vector) print(f"方程组的解为:x={solution[0]}, y={solution[1]}") except np.linalg.LinAlgError: print("该方程组无解或者有无穷多解") # 获取用户输入 a = int(input("a: ")) b = int(input("b: ")) c = int(input("c: ")) d = int(input("d: ")) e = int(input("e: ")) f = int(input("f: ")) # 创建一个包含所有参数的方程组实例 equation = HomogenEquation(a, b, c, d, e, f) # 调用实例方法判断并求解 if equation.isSolvable(): equation.getXY() else: print("该方程组无解或者有无穷多解")
关键改动说明
- 重构类的初始化方法:把方程组的6个参数一次性传入,作为实例的属性,这样更符合逻辑,不用单独创建多个无用的实例。
- 修改
isSolvable方法:不再需要传参,直接使用实例自身的属性判断行列式是否不为0(纠正了你之前的逻辑错误:行列式为0时方程组无解或有无穷多解,不为0才有唯一解)。 - 调整
getXY方法:同样使用实例属性,并且添加了异常捕获,避免因为行列式为0调用np.linalg.solve时抛出错误。 - 正确调用实例方法:创建一个
HomogenEquation实例后,用这个实例去调用isSolvable和getXY方法,而不是用原始的整数变量。
内容的提问来源于stack exchange,提问作者Python Coder
相关产品推荐
相关产品推荐

