为什么打印对象的内存位置而不是我想要的内容?

时间:2016-06-21 15:38:00

标签: python dictionary

我不确定打印字典时发生了什么。

在Python 3中,我有一个名为transSwiss的parse_blast对象字典。每个对象的proteinID是整个对象作为值的关键。

我可以完整地打印transSwiss并且我也可以打印blasto.protein,但是当我将它们组合起来获得字典值时不能。我不确定使用时发生了什么:

print(transSwiss[blasto.protein])
<__main__.parse_blast object at 0x000000373C5666A0>

这是代码

class parse_blast(object):

    def __init__(self, line):
        #Strip end-of-line and split on tabs
        self.fields = line.strip("\n").split("\t")
        self.transcriptId, self.isoform = self.fields[0].split("|")
        self.swissStuff = self.fields[1].split("|")
        self.swissProtId = self.swissStuff[3]
        self.percentId = self.fields[2]

    def filterblast(self):
        return float(self.percentId) > 95



class parse_matrix(object):
    #Consider __init__ as a Constructor
    def __init__(self, matrix_lines):

        (self.protein, 
        self.Sp_ds, 
        self.Sp_hs, 
        self.Sp_log, 
        self.Sp_plat) = matrix_lines.strip("\n").split("\t")

    def separate_tuples(one_tuple):
        return "\t".join(one_tuple)


blastmap = map(parse_blast, blast_output.readlines())

filtered = filter(parse_blast.filterblast, blastmap)

matrixmap = map(parse_matrix, matrix_output.readlines()[1:])

transSwiss = {blasto.transcriptId:blasto for blasto in filtered}


for matrixo in matrixmap:

    print(transSwiss[matrixo.protein])

1 个答案:

答案 0 :(得分:1)

因为您的对象是由您定义的,所以您还需要告诉python您希望它如何打印。你可以通过定义一个名为&#34; __ str __&#34;的函数来做到这一点。返回您想要打印对象的方式。

https://en.wikibooks.org/wiki/Python_Programming/Classes#str