解释器的python类输出

时间:2014-04-10 05:14:52

标签: python class output

我有以下python类:

class uf_node:
    def __init__(self, Vertex):
        self.vertex = Vertex
        self.rep = Vertex

    def set_rep(self, Rep):
        self.rep = Rep

现在,在翻译处,我会做以下事情:

>>> from uf_node import *
>>> u = uf_node('a')
>>> u
<uf_node.uf_node instance at 0x7f56069ca758>

可以获得更好的输出,也许创建类似'toString()'函数的东西,当你尝试打印对象时会自动调用它吗?

2 个答案:

答案 0 :(得分:1)

REPL调用您班级的__repr__功能。因此,您可以覆盖__str____repr__这样的功能

class uf_node:
    def __init__(self, Vertex):
        self.vertex = Vertex
        self.rep = Vertex

    def set_rep(self, Rep):
        self.rep = Rep

    def __str__(self):
        return "Rep: {}, Vertex: {}".format(self.rep, self.vertex)

    def __repr__(self):
        return "Rep: {}, Vertex: {}".format(self.rep, self.vertex)

有了这个改变,

>>> u = uf_node('a')
>>> u
Rep: a, Vertex: a
>>> 

注意:您可以在此excellent answer

中详细了解__str____repr__之间的差异

答案 1 :(得分:0)

您可以覆盖 str repr 类方法。

__str__处理转换为字符串,而__repr__是您可以使用的字符串表示形式,如果您想要再次实例化它。 __repr__应该返回一个有效的Python表达式。两种方法都返回一个字符串您通常使用字符串构造函数str()(str类将调用__str__方法)或repr()函数调用这些方法。

class uf_node(object):
    def __init__(self, Vertex):
        self.vertex = Vertex
        self.rep = Vertex

    def set_rep(self, Rep):
        self.rep = Rep

    def __str__(self):
        '''Used for string conversion'''
        return 'This node uses vertex %s' % self.vertex

    def __repr__(self):
        '''Used for string representation'''
        return 'uf_node(%s)' % repr(self.vertex)

v = uf_node('a')
print str(v) # -> 'This node used vertex a'
print repr(v) # -> "uf_node('a')

请在此处查看文档,并对其进行了详细解释:https://docs.python.org/2/reference/datamodel.html