代码之家  ›  专栏  ›  技术社区  ›  basil

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

  •  1
  • basil  · 技术社区  · 7 年前

    我有一门课:

     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]]
    

    为什么会出现此错误?我怎样才能修复它?

    1 回复  |  直到 7 年前
        1
  •  4
  •   DBedrenko    7 年前

    您需要实例化该类 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)