无法在python中调用类函数(TypeError:object()不带参数)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法在python中调用类函数(TypeError:object()不带参数)相关的知识,希望对你有一定的参考价值。

我有一节课:

 class MATRIX:

     # convenience function
     def getDimensions(self,M):
         r = len(M)
         c = len(M[0])
         return r,c

     def add(self,M1,M2):
         res = []
         r1,c1 = self.getDimensions(M1)
         r2,c2 = self.getDimensions(M2)
         if (r1 != r2) or (c1 != c2):
             print("dimensions not the same")
             return res

         for i in range(len(M1)):
             row=[]
             for j in range(len(M1[i])):
                 element=M1[i][j] + M2[i][j]
                 row.append(element)
             res.append(row)

    return res

简单的类,不保存状态,只有一个添加两个矩阵的函数。我是Python中OOP的初学者,所以,除非我错了,所有类函数都必须以self参数开头。

该函数被称为:

 Z = MATRIX.add(X,Y)

其中X和Y是矩阵

当我尝试这样做时,我收到以下错误:

 Traceback (most recent call last):
   File "temp.py", line 82, in <module>
Z = MATRIX(X,Y)
 TypeError: object() takes no parameters

在这种情况下:

 X = [[1,1,1], [2,2,2], [3,3,3]]
 Y = [[4,4,4], [5,5,5], [6,6,6]]

为什么会出现此错误?我该如何解决?

答案

在使用其实例方法之前,需要像这样实例化类MATRIX

m = MATRIX()
z = m.add(X, Y)

但是如果没有实例数据,那么实例方法就没有多大意义了。在这种情况下,您可以使方法成为静态,而不必实例化该类以使用其方法:

class MATRIX:

    # Note that `self` parameter is removed, as it's no longer an
    # instance method.
    @staticmethod
    def add(M1,M2):
         return M1 + M2

z = MATRIX.add(X, Y)

以上是关于无法在python中调用类函数(TypeError:object()不带参数)的主要内容,如果未能解决你的问题,请参考以下文章

为啥使用默认的 React Google Maps 得到“TypeError:无法将类调用为函数”?

未捕获的 TypeError:无法将类作为函数调用 React

调用类成员函数会产生 TypeError [重复]

挂载钩子中的错误:“TypeError:没有'new'就不能调用类构造函数节点”

TypeError:没有'new'就不能调用类构造函数MixinStrategy

Python:不能在类中使用函数两次,TypeError:'list'对象不可调用,为什么? [关闭]