Python 对象名称与交互式解释器
当我定义一个类并创建它的实例时,在命令行输入这个实例的名字会返回一个内存地址。这没什么好奇怪的,但有没有人知道怎么定义一个类,让在命令行输入它的名字时返回的内容不是内存地址呢?
举个例子:
>> import numpy as np
>> foo = np.array([1,2,3])
>> foo
>> array([1, 2, 3])
如果我能让它返回一些更有意义的东西,那就太好了。
3 个回答
1
默认情况下,Python 类有一些特殊的方法,其中两个特殊的方法可以帮助我们完成这个任务,它们是:
__str__
__repr__
如果你使用 repr 方法,你就能实现你想要的效果。而如果你使用 str 方法,它会返回你在使用 print 语句时所显示的内容。
请注意,你应该从这些方法中返回你想要展示的内容。
1
你需要在这个类里面定义一个 __repr__
方法。
5
这就是 __repr__
方法的作用:
>>> class point(object):
... def __init__(self, x, y):
... self.x = x
... self.y = y
...
... def __repr__(self):
... return "point(%d, %d)" % (self.x, self.y)
>>> x = point(3, 4)
>>> x
point(3, 4)
如果没有自定义的 __repr__
实现,你会看到和你在问题中描述的一样的内容:
>>> class defaultPoint(object):
... def __init__(self, x, y):
... self.x = x
... self.y = y
...
>>> p = defaultPoint(0, 3)
>>> p
<__main__.defaultPoint object at 0x16767b0>