运行以下代码后,如 shell 上的 >>> python -i example.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
>>>
继续该解释器 session ,如果我再次调用构造函数,如下所示,
>>> Coordinate(100, 200)
In init
In __repr__
Coord: {'y': 200, 'x': 100}
>>>
我看到控制进入了 __repr__()
方法。
我的问题:
当我们从sample.py文件中调用Cooperative(100, 200)
时,为什么我们没有进入__repr__()
方法?
最佳答案
发生这种情况是因为您没有显式调用任何 print
.py
中的函数文件。在python解释器中,当你写一个句子时,它会立即打印结果,所以它会进入 __repr__
功能。
如果您执行print
您的 .py
中的声明code,__repr__
返回的字符串将会被打印,除非你已经实现了 __str__
函数,它更像是对象的“非正式”且通常更短的字符串表示。 __repr__
根据 documentation 应该是一个有效的 python 表达式。如果没有__repr__
或__str__
方法是在你的类中实现的,默认情况下,python解释器不知道如何打印你的类的内容,所以它只是打印:<Coordinate object at 0x0000...>
.
关于python - python中类的__repr__方法的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23081601/