在代码下面运行后,在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)
方法?
答案 0 :(得分:4)
这是因为您没有在print
文件中显式调用任何.py
函数。在python解释器中,当你写一个句子时,它会立即打印出结果,因此它会进入__repr__
函数。
如果您在print
代码中执行.py
语句,则会打印__repr__
返回的字符串,除非您已实施__str__
功能,对象的“非正式”和通常较短的字符串表示。根据{{3}},__repr__
应该是一个有效的python表达式。如果您的类中没有实现__repr__
或__str__
方法,默认情况下,python解释器不知道如何打印类的内容,因此它只打印:<Coordinate object at 0x0000...>
。< / p>