如何将列表作为我自己的自定义Matrix类进行类型转换?

时间:2016-09-24 08:53:48

标签: python python-2.7 matrix

我有一个Matrix课程:

class Matrix(object):
    def __init__(self,row,col):
        self.row=row
        self.col=col
        self.matlist=[]
        self.create()
    def create(self):
        for i in range(self.row):
            rowlist=[]
            for j in range(self.col):
                element=input("Enter Row: {} Col: {} :  ".format(i+1,j+1))
                rowlist.append(element)
            self.matlist.append(rowlist)   

    def __str__(self):
        j=str()
        for i in range(len(self.matlist)):
            for j in range(len(self.matlist[i])):
                j+=str(self.matlist[i][j])+"  "
            j+="\n"
        return j

    def __add__(self,y):
        newmatrix=[]
        el1=self.matlist
        el2=y.matlist

        if (len(el1)==len(el2)) and (len(el1[0])==len(el2[0])):
            for i in range(len(el1)):
                newlist=[]
                for j in range(len(el1[i])):
                    m=el1[i][j]+el2[i][j]
                    newlist.append(m)
                newmatrix.append(newlist)
            return newmatrix

我创建了两个矩阵对象:

m=Matrix(2,2)
n=Matrix(2,2)

然后我添加矩阵:

k=m+n

调用返回__add__()的{​​{1}}方法。但是我希望它将它作为list对象返回,这样当我尝试打印它时,Matrix方法被调用,__str__()剂量只被打印出来。有没有办法将list强制转换为list

1 个答案:

答案 0 :(得分:0)

这样的事情应该有效。

首先,从列表中创建矩阵的类方法:

class Matrix(object):
    def __init__(self, row=None, col=None):
        self.matlist = []
        if row and col:
            self.row = row
            self.col = col
            self.create()

    @classmethod
    def fromlist(cls, list):
        res = Matrix()
        for row in list:
            res.matlist.append(row)
        return res

然后,__add__方法使用所述方法返回Matrix

def __add__(self,y):
    newmatrix=[]
    el1=self.matlist
    el2=y.matlist

    if (len(el1)==len(el2)) and (len(el1[0])==len(el2[0])):
        for i in range(len(el1)):
            newlist=[]
            for j in range(len(el1[i])):
                m=el1[i][j]+el2[i][j]
                newlist.append(m)
            newmatrix.append(newlist)
        return Matrix.fromlist(newmatrix)

请注意,您应该进行一些检查。例如,此代码不会检查所有行的大小是否相同。您在代码中没有考虑的其他检查是,在添加两个Matrix对象时,它们的大小应该相同。