【问题标题】:How to print __repr__ in a Python3 file? (not in shell)如何在 Python3 文件中打印 __repr__? (不在外壳中)
【发布时间】:2017-03-26 05:00:35
【问题描述】:

我知道在 Python Shell 中,当你输入 >>> object 时,它会显示 object.__repr__ 方法,如果你输入 >>> print(object),它会显示 object.__str__ 方法。

但我的问题是,在执行 Python 文件时是否有一种简短的方法可以打印 __repr__

我的意思是,在 file.py 中,如果我使用 print(object),它会显示 object.__str__,如果我只输入 object,它什么也不会显示。

我尝试过使用print(object.__repr__),但它会打印出<bound method object.__repr__ of reprReturnValue>

或者这是不可能的?

【问题讨论】:

  • 您需要使用()实际调用该方法,例如object.__repr__()。目前您只是指方法本身。更合适的调用是使用 repr() 内置函数,例如repr(object()).
  • @AChampion 不起作用。每个人都在没有测试的情况下不断提出这个建议。
  • @AlexHall,不知道你为什么认为这是不正确的。 class X(object): def __repr__(self): return 'Hello'; X().__repr__()repr(X()) 一样输出预期结果。
  • @AChampion 我以为 OP 的意思是 object 的实际含义,而不是他用实例掩盖了这个名字。
  • 啊,我认为这是一些通用引用,因为如果您在解释器中键入 object,基本的 object 类型会打印一些东西。而object.__repr__ 不会是绑定方法。

标签: python shell magic-methods repr


【解决方案1】:

只需使用repr(object)

print(repr(object))

【讨论】:

  • @AlexHall 我想我在想__str__。我确定了答案。
  • object.__str__() 如果您是这样想的,那也不起作用。
  • @AlexHall 你确定吗?我刚刚用__str__ 方法创建了一个类,str(obj)obj.__str__() 都有效。事实上__repr__也是如此。
  • 我的错误,我认为 OP 表示对象的实际含义,而不是他用实例掩盖了名称。
【解决方案2】:

试试:

print(some_object.__repr__())

__repr__ 需要在打印之前调用,因为它是一种与 __file____name__ 等属性不同的方法,这些属性不需要调用(也不能调用)。 __str__() 方法也是如此:您需要使用 -some_object.__str__() 调用它,而不是 some_object.__str__

我假设 OP 指的是一个带有单词 object 的通用对象,而不是名为 object 的实际 Python 对象,因此我使用了变量名称 some_object。正如 cmets 中所指出的,如果您确实执行 object.__repr__() 这将引发异常,因为必须在实例上调用 __repr__()(即,object().__repr__() 将起作用)。

【讨论】:

  • @AlexHall,我试过了。你能解释一下它是怎么出错的吗?
  • @AlexHall 哦,您指的是 python 对象object 吗?我假设 OP 使用 object 只是为了引用任何对象,即字符串、列表等。
  • 是的,我认为 OP 是指实际类型。
【解决方案3】:

你可以使用旧的反引号

print(`object`)

在 Python 2 中,或

print(repr(object))

在 Python 2 和 3 中

【讨论】:

    【解决方案4】:

    如果您只想打印表示而不是其他任何内容,那么

    print(repr(object))
    

    将打印表示。您的调用出错的地方是缺少括号,如下所示:

    print(object.__repr__())
    

    但是,如果您希望这成为更多信息的一部分并且您正在使用字符串格式,则无需调用repr(),您可以使用转换标志!r

    print('The representation of the object ({0!r}) for printing,'
          ' can be obtained without using "repr()"'.format(object))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-25
      • 1970-01-01
      • 2020-09-26
      • 1970-01-01
      • 2017-11-12
      • 2018-11-10
      相关资源
      最近更新 更多