类中的Python变量以某种方式获得modifid?

类中的Python变量以某种方式获得modifid?,python,class,Python,Class,我不太了解python的继承方法。我有一个这样的类,它处理一个特殊的矩阵 class PSSM: matrix = {} matrixfile = "" def __init__(self,matrixfile): self.matrixfile = matrixfile PSSM.matrix = {} PSSM.matrixfile = matrixfile try: f =

我不太了解python的继承方法。我有一个这样的类,它处理一个特殊的矩阵

class PSSM:

    matrix = {}
    matrixfile = ""

    def __init__(self,matrixfile):
        self.matrixfile = matrixfile
        PSSM.matrix = {}
        PSSM.matrixfile = matrixfile
        try:
            f = open("%s" %matrixfile,"r")
            for i in f:
                PSSM.matrix[i.split()[0]] = []
                for j in i.split():
                    try:
                        PSSM.matrix[i.split()[0]].append(float(j))
                    except ValueError:
                        continue
            f.close()
        except IOError:
            try:
                for i in StringIO(matrixfile):
                    PSSM.matrix[i.split()[0]] = []
                    for j in i.split():
                        try:
                            PSSM.matrix[i.split()[0]].append(float(j))
                        except ValueError:
                            continue
            except ValueError:
                return

    def normalize(self):
        newmatrix = self.matrix
        for i in range(len(newmatrix["A"])):
            suma = 0
            for j in newmatrix.keys():
                suma += newmatrix[j][i]
            for j in newmatrix.keys():
                newmatrix[j][i] = newmatrix[j][i]/suma
        results = ""
        for i in newmatrix.keys():
            results += i
            for j in newmatrix[i]:
                results += "\t% 6.2f" %j
            results += "\n"
        return results
该程序运行良好,但当我尝试打印和测试它时,我遇到了一些意想不到的结果

我还有一个printmatrix对象,它打印矩阵并将其添加到字符串中,然后返回字符串

#returns the matrix I used as input
print PSSM.printmatrix(a) 

# returns the normalized matrix as expected
print PSSM.normalize(a) 
但如果我跑

print PSSM.printmatrix(a)
它再次返回标准化矩阵

不知何故,类中的矩阵变量继承了newmatrix变量

如果我没有在任何地方更改矩阵变量,它怎么可能发生变化

我只是复制了它的值,只修改了newmatrix变量

class PSSM:
    matrix = {}
    matrixfile = ""
Matrix和matrixfile不绑定到实例,而是绑定到类本身。所以该类的所有实例都共享它。 将这些移动到_init__函数:

def __init__(self,matrixfile):
  self.matrix = {}
  self.matrixfile = matrixfile
PSSM.matrix也是如此,将其更改为self.matrix

使用OO时,您还应该创建一个PSSM实例并使用它

myMatrixFile = "bla"
myPssm = PSSM(myMatrixFile)

print myPssm.printmatrix() #returns the matrix I used as input
print myPssm.normalize() # returns the normalized matrix as expected

我更改了matrix={}的位置,但问题仍然存在。a=PSSMlocationofmatrix打印PSSM.printmatrixa,打印PSSM.normalizea,打印PSSM.printmatrixa,第二次打印仍打印原稿的归一化替代品