在控制台中调用时,类的默认打印方法是什么?

时间:2017-07-14 03:27:49

标签: python

在Python交互式控制台(IDLE,IPython等)中,如果我自己输入一个变量名,我将返回相当于打印该变量的内容。

In [1]: foo = {'a':1, 'b':2}
In [2]: foo
Out [2]: {'a':1, 'b':2}
In [3]: print(foo)
Out [3]: {'a':1, 'b':2}

我希望将此功能合并到容器类中,例如:

class Foo():
    def __init__(self, bar):
        self.bar = bar
    def __mysteryfunction__(self)
        print(self.bar)

我喜欢像以前一样打印课程,但我得到了:

In [1]: foo = Foo({'a':1, 'b':2})
In [2]: foo
Out [2]: <__main__.foo at 0x1835c093128>

我已经搜索了几乎所有我能想到的可能被称之为的排列,并且没有找到同样的问题。这是一个像我希望的类方法,还是内置在控制台解释器中的东西?如果是后者,可以修改吗?

2 个答案:

答案 0 :(得分:2)

对于print x,调用x.__str__。 对于返回对象时REPL中的输出,将调用x.__repr__

了解strrepr函数。

答案 1 :(得分:0)

这是类的__str__方法。

来自documentation

  

object.__str__(self)

     

由str(object)和内置函数format()和print()调用,以计算对象的“非正式”或可打印的字符串表示形式。返回值必须是字符串对象。

例如:

class Foo:
    def __init__(self, bar):
        self.bar = bar

    def __str__(self):
        return 'My name is foo and my bar is ' + self.bar

foobar = Foo('high')

print(foobar)  # My name is foo and my bar is high