【问题标题】:Python object names and the interactive interpreterPython 对象名称和交互式解释器
【发布时间】:2013-01-23 14:30:51
【问题描述】:

当我定义一个类并创建它的实例时,在 shell 中输入实例名称会返回一个内存位置。这并不奇怪,但是有人知道如何定义一个类,使得将其名称输入到 shell 中实际上会返回除内存位置之外的其他内容吗?

例子:

>> import numpy as np
>> foo = np.array([1,2,3])
>> foo
>> array([1, 2, 3])

如果我能做这样的事情就好了。

【问题讨论】:

    标签: python interpreter interactive


    【解决方案1】:

    这就是__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>
    

    【讨论】:

    • __str__ 方法不也能做同样的事情吗?我正在学习 Python,所以我不确定是否可以为像 numpy 这样的外部模块做到这一点。
    • 查看答案中指向 Python 数据模型文档的链接,以了解 __repr____str__ 之间的区别。
    • 知道了,前者用于正式的字符串表示,而后者用于非正式的用户消费输出。此外,__str__ 仅在对象上调用 print 函数时才有效。
    • _-str__也会在对象被转换为字符串(例如str(myObject))或格式化为字符串时被调用。
    • 谢谢!我昨晚整晚都在挖掘特殊方法,但不知何故错过了 reprstr
    【解决方案2】:

    你需要在类上定义一个__repr__方法。

    【讨论】:

      【解决方案3】:

      默认情况下,我们有用于 python 类的魔法方法,其中两个魔法方法将帮助我们做这件事,它们是

      __str__
      __repr__
      

      我使用 repr 你可以实现你想要的。 如果您使用 str 它将返回您在使用 print 语句时在该方法中返回的内容

      请注意,您应该从这些方法中返回您想要显示的内容

      【讨论】:

        猜你喜欢
        • 2015-06-29
        • 2023-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多