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

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("该方程组无解或者有无穷多解")

关键改动说明

  1. 重构类的初始化方法:把方程组的6个参数一次性传入,作为实例的属性,这样更符合逻辑,不用单独创建多个无用的实例。
  2. 修改isSolvable方法:不再需要传参,直接使用实例自身的属性判断行列式是否不为0(纠正了你之前的逻辑错误:行列式为0时方程组无解或有无穷多解,不为0才有唯一解)。
  3. 调整getXY方法:同样使用实例属性,并且添加了异常捕获,避免因为行列式为0调用np.linalg.solve时抛出错误。
  4. 正确调用实例方法:创建一个HomogenEquation实例后,用这个实例去调用isSolvable和getXY方法,而不是用原始的整数变量。

内容的提问来源于stack exchange,提问作者Python Coder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:46:17