查询python中类的__repr__方法

时间:2014-04-15 10:54:59

标签: python

在代码下面运行后,在shell上运行>>> python -i sample.py

class Coordinate(object):
    def __init__(self, x, y):
        print('In init')
        self.x = x
        self.y = y

    def __repr__(self):
        print('In __repr__')
        return "Coord: " + str(self.__dict__)

def add(a, b):
    return Coordinate(a.x + b.x, a.y + b.y)

def sub(a, b):
    return Coordinate(a.x - b.x, a.y - b.y)

Coordinate(100, 200)
Coordinate(300, 200)

我看到输出为

PS C:\mystuff> python -i .\sample.py
In init
In init
>>>

继续该解释器会话,如果我再次调用构造函数,如下所示,

>>> Coordinate(100, 200)
In init
In __repr__
Coord: {'y': 200, 'x': 100}
>>>

我看到控件进入__repr__()方法。

我的问题: 当我们从sample.py文件中调用__repr__()时,为什么我们不进入Coordinate(100, 200)方法?

1 个答案:

答案 0 :(得分:4)

这是因为您没有在print文件中显式调用任何.py函数。在python解释器中,当你写一个句子时,它会立即打印出结果,因此它会进入__repr__函数。

如果您在print代码中执行.py语句,则会打印__repr__返回的字符串,除非您已实施__str__功能,对象的“非正式”和通常较短的字符串表示。根据{{​​3}},__repr__应该是一个有效的python表达式。如果您的类中没有实现__repr____str__方法,默认情况下,python解释器不知道如何打印类的内容,因此它只打印:<Coordinate object at 0x0000...>。< / p>