Python 对象名称与交互式解释器

0 投票
3 回答
1087 浏览
提问于 2025-04-17 13:24

当我定义一个类并创建它的实例时,在命令行输入这个实例的名字会返回一个内存地址。这没什么好奇怪的,但有没有人知道怎么定义一个类,让在命令行输入它的名字时返回的内容不是内存地址呢?

举个例子:

>> 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>

撰写回答