python - 使用自定义类打印字典作为值不会调用它们的字符串方法?

标签 python dictionary tostring

我在 python 中搞乱类并写了 2 个小类:

class ClaElement:

    start = None
    end = None
    basesLeft = None
    orientation = None
    contig = None
    size = None

    def __init__(self, contig, start, end, orientation, basesLeft=None):

        self.contig = contig
        self.start = start
        self.end = end
        self.orientation = orientation
        self.basesLeft = basesLeft

        self.size = self.end - self.start

    def __str__(self):
        return "{ClaElement: "+str(self.contig)+"_"+str(self.start)+"_"+str(self.end)+"_"+str(self.orientation)+"}"

    def getSize(self):
        return self.size

class ClaCluster:

    contig = None
    clusterElements = []

    def __init__(self, contig, firstElement):
        self.contig = contig
        self.addElement(firstElement)

    def addElement(self, claElement):
        self.clusterElements.append(claElement)

    def getFirst(self):
        return self.clusterElements[0]

    def getLast(self):
        return self.clusterElements[-1]

    def getElements(self):
        return self.clusterElements

    def getContig(self):
        return self.contig

    def __str__(self):
        return "{ClaCluster: "+str(self.contig)+" "+str(len(self.clusterElements))+" elements}"

还有我的测试主程序:

from ClaElement import ClaElement
from ClaCluster import ClaCluster

if __name__ == '__main__':

    ele = ClaElement("x",1,2,"left")

    claDict = dict()

    cluster = ClaCluster("x", ele)

    claDict["hello"] = cluster

    print(claDict)
    print(claDict["hello"])
    print(ele)

这导致以下输出:

{'hello': <ClaCluster.ClaCluster object at 0x7fe8ee04c5f8>}
{ClaCluster: x 1 elements}
{ClaElement: x_1_2_left}

现在我的问题是为什么我第一次打印的输出是内存地址,即使我为我的类 ClaCluster 提供了一个有效的字符串方法?有什么方法可以让我在打印字典时调用该方法,还是必须手动迭代?

最佳答案

内置dict类型的__str__()方法使用的是你类的__repr__()方法,而不是 __str__()。只需重命名您的方法,一切都应该可以正常工作。

关于python - 使用自定义类打印字典作为值不会调用它们的字符串方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35459473/

相关文章:

c++ - 为什么 to_string 没有模板化?

python - 将 numpy 数组保存为 SVG 格式

python - 在 Python 中使用 Selenium 登录 gmail

arrays - 如何以随机顺序打印这本字典中的所有数字而不重复它们

sql - 示例 [英文] 用于填充表的字典 SQL 脚本?

c# - 如何创建一个非重复随机数数组

python - 如何使用 pandas/sqlalchemy 在 .db 文件中创建多个表

python - 通过识别重要变量来降维

python - 在 python 中重新组合列表/字典

javascript - 如何在 JavaScript 中准确地将数字转换为字符串