使用实例的值附加/写入

时间:2016-05-28 05:07:30

标签: python class instance

所以我刚开始使用python中的类,但是这个项目Euler(q 81)我使用的类只是为了变得有点棘手?我猜?

我可以获取(2n + 1 * 2n + 1)网格的值,但我无法使用它们附加到另一个列表甚至写入文件。

def minSum(matrix):
    file = open("pleasedeargodwork.txt", "w")
    newList = []

    for x in maxtrix.grids:
        for y in x:
            newList.append(y)
            print y,
            file.write(y,)
     print newList

>>> 1 7 2 5 6 2 9 2 5
>>> TypeError: must be string or read-only character buffer, not instance
>>> <matrix.Supplies instance at 0x0240E9B8>

^^我希望这最后一行给我的是值,而不是实例,但是如何?

我的矩阵类看起来像这样:

class Matrix:
    def __init__(self, grids):
       self.size = len(grids) / 2
       self.grids = [[Supplies(s) for s in row] for row in grids]

class Supplies:
    def __init__(self, supp):
        if isinstance(supp, list):
            self.value = supp[0]

“Matrix”是类名,“matrix”是文件名和为我的类minSum提供的参数,以便能够访问此文件。

如果您需要查看更多矩阵文件,请告诉我。

感谢。

1 个答案:

答案 0 :(得分:1)

当您尝试将实例写入文本文件时,看起来您有另一个错误,但这是打印值而不是实例的方法:

__repr__方法可让您定义对象在打印时的外观。

__repr__方法添加到Supplies类,如下所示:

class Supplies:
    def __init__(self, supp):
        if isinstance(supp, list):
            self.value = supp[0]

    def __repr__(self):
        return str(self.value)

每当您打印Supplies实例时,Python都会打印其value属性。请注意,value类中不保证Supplies定义,因此您可能希望在尝试将其转换为__repr__方法中的字符串之前对其进行初始化或检查。 / p>

修改

如果您希望newList包含每个Supplies实例的值,您只需附加值而不是实例:

newList.append(y.value)

而不是:

newList.append(y)