Python类问题“ AttributeError:'int'对象没有属性isSolvable”

时间:2019-11-29 13:59:19

标签: python class

我试图学习Python中的类属性。我正在尝试求解2X2方程。从用户那里获得6个值之后,我尝试在该类中进行事务处理,但它给出了一个错误。你能帮我吗?

import numpy as np

class HomogenEquation():

     def __init__(self,number): 
        self.number = number
        self.value=0  

     def isSolvable(self,a,d,b,c):
         return (a*d)-(b*c)==0

     def getXY(self,a,b,c,d,e,f):
         x = np.array([[a, b],[c,d]])
         y = np.array([e, f])
         print(np.linalg.solve(x,y))


a=int(input("a: "))
a_value= HomogenEquation(a)

b=int(input("b: "))
b_value= HomogenEquation(b)

e=int(input("e: "))
e_value= HomogenEquation(e)

c=int(input("c: "))
c_value= HomogenEquation(c)

d=int(input("d: "))
d_value= HomogenEquation(d)

f=int(input("f: "))
f_value= HomogenEquation(f)

if a.isSolvable(a,d,b,c):

    getXY(a,b,c,d,e,f)
else:
    print("The equation has no solution.")

3 个答案:

答案 0 :(得分:1)

首先,如果我了解您课堂的目的,那么您实施的是错误的。


这是我的想法:

您不需要为每个数字创建该类的多个实例,因为您的类不是。这是一个方程类。假设您的代码需要重新构造。可以实现多种实现,但是您对我来说毫无意义。
您可以改进的地方:

  • 将所有数字一起传递给方程式类
  • 不为每个数字创建方程的多个实例(没有意义)

因此,只需更改代码即可获得结果:

import numpy as np


class HomogenEquation():
     def __init__(self, a, b, c, d, e, f): 
        # initializing class with all variables all together
        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

     def getXY(self):
         x = np.array([[self.a, self.b],[self.c, self.d]])
         y = np.array([self.e, self.f])
         return np.linalg.solve(x, y)

好吧,所以现在类结构很有意义(但仍有一些事情有待改进)


因此,要使用它,您只需要用所有数字初始化一个实例并调用t的方法:

# btw this input looks not right, but I'll leave it

a=int(input("a: "))
b=int(input("b: "))
e=int(input("e: "))
c=int(input("c: "))
d=int(input("d: "))
f=int(input("f: "))

equation = HomogenEquation(a,b,c,d,e,f) # creating one instance for equation

if equation.isSolvable():
    print(equation.getXY())             # and calling it's methods
else:
    print("The equation has no solution.")

注释:该代码仍具有多个缺点,但现在可以使用类了。
希望这对您将来的学习有所帮助!

答案 1 :(得分:0)

您引用的对象错误。 a, b, c, d, e, f的类型为int,其中a_value, b_value, c_value, d_value, e_value, f_value的类型为HomogenEquation

您可能想要:

if a_value.isSolvable(a,d,b,c):
    getXY(a,b,c,d,e,f)
else:
    print("The equation has no solution.")

答案 2 :(得分:0)

您有以下课程:

class HomogenEquation:

 def __init__(self,number): 
    self.number = number
    self.value=0  

 def isSolvable(self,a,d,b,c):
     return (a*d)-(b*c)==0

 def getXY(self,a,b,c,d,e,f):
     x = np.array([[a, b],[c,d]])
     y = np.array([e, f])
     print(np.linalg.solve(x,y))

如果要收集用户输入然后创建对象,可以执行以下操作:

# in the main method
a = int(input("Number: "))

# Collect all the other values the same way.

# Create an object of HomogenEquation
a_value = HomogenEquation(a)
print(a_value.isSolvable(a,b,c,d,e,f))