如何在Python3文件中打印__repr__?(不是在shell中)

7
我知道在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
@AChampion那个方法不起作用。大家都在没有测试的情况下一直建议这个方法。 - Alex Hall
@AlexHall,不确定您为什么认为这不正确。class X(object): def __repr__(self): return 'Hello'; X().__repr__()输出了预期的结果,repr(X())也是如此。 - AChampion
@AChampion 我原以为OP的意思是“对象”的实际含义,而不是他用一个实例来遮蔽这个名称。 - Alex Hall
啊,我以为它是一些通用的引用,因为如果你在解释器中只键入“object”,基本的“object”类型会打印出一些东西。而且,“object.__repr__”不会是一个绑定方法。 - AChampion
4个回答

7
如果您只想打印表示而无需其他内容,那么。
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))

1
只需使用 repr(object)
print(repr(object))

@AlexHall 我想我是在考虑 __str__。我已经修正了答案。 - Mark Ransom
如果你在想object.__str__()也不起作用的话,那么你是错的。 - Alex Hall
@AlexHall 你确定吗?我刚刚创建了一个带有__str__方法的类,str(obj)obj.__str__()都可以工作。实际上,__repr__也可以。 - Mark Ransom
我的错误,我以为 OP 的意思是对象的实际含义,而不是他用实例遮蔽了名称。 - Alex Hall

0

尝试:

print(some_object.__repr__())

__repr__需要在打印之前调用,因为它是一个方法,不像__file____name__等属性不需要被调用(事实上也不能)。同样的道理也适用于__str__()方法:你需要使用some_object.__str__()来调用它,而不是some_object.__str__

我假设OP使用单词object指的是一般对象,而不是Python中真正的叫做object的对象,所以我使用了变量名some_object。正如评论中指出的那样,如果你直接使用object.__repr__(),这将会引发异常,因为__repr__()必须在实例上调用(即object().__repr__()可以工作)。


@AlexHall,我已经尝试过了。您能否解释一下它为什么是一个错误? - elethan
@AlexHall哦,你是指Python对象object吗?我认为OP只是使用object来指代任何对象,比如字符串、列表等。 - elethan
是的,我认为OP指的是实际类型。 - Alex Hall

0

你可以使用旧的反引号

print(`object`)

在Python 2中,或者

print(repr(object))

适用于Python 2和3


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接