所以昨天我尝试在我的代码中使用 repr 和 str 来打印列表中的对象。这里只是我遇到同样问题的小例子代码。
class Something:
def __init__(self):
pass
def __repr__(self):
return "I want this out"
def __str__(self):
return "this comes out"
def main():
k = Something()
k
print(k)
main()
印刷什么:
出来了
处理完成,退出代码为0
为什么我不能从我的对象中获取 repr ,即使我在调用对象时给它返回行?
答案 0 :(得分:-1)
__repr__()
和__str__()
用于不同目的。
__repr__'s
目标明确无误__str__'s
目标是
可读有一篇很棒的文章on this here。
在您的情况下,您的代码只是引用k
,希望这会显示k
的repr版本。这适用于交互式提示,但不适用于脚本。在脚本中,要查看对象的repr
表示,必须使用repr()
函数。要查看对象的str()
表示,通常必须使用str()
函数。
值得注意的是,print()
函数默认显示str
表示,这就是为什么你可以打印它而不先显式调用str()
。
class Something:
def __init__(self):
pass
def __repr__(self):
return "I want this out"
def __str__(self):
return "this comes out"
def main():
k = Something()
print("repr:", repr(k))
print("str:", str(k))
print("defaults to calling str() if available: ", k)
main()
repr: I want this out
str: this comes out
defaults to calling str() if available: this comes out
答案 1 :(得分:-2)
解释器运行代码有两种方法。
首先是REPL上下文(iPython shell,或ipdb debug env),在这种情况下,python解释器将调用__repr__
函数,我在ipython环境中尝试过,它的工作原理如下:
In [1]: class Something(object):
...:
...: def __repr__(self):
...: return 'in __repr__'
...:
In [2]: k = Something()
In [3]: k
Out[3]: in __repr__
其次,当您按python xxx.py
启动脚本或项目时,解释程序会调用__str__
。
我想你刚尝试过第二种方式。
希望这可以帮到你一点。