gpt4 book ai didi

python - 在 python 中打印对象的约定

转载 作者:太空狗 更新时间:2023-10-30 01:41:39 24 4
gpt4 key购买 nike

在 python 中是否有任何标准约定来打印对象。我知道如果我只是尝试打印对象,它会打印内存地址,但我想覆盖该方法并能够打印对象的人类可读格式以帮助调试。

人们是否遵循任何标准约定,或者它是否不是定义此类方法的好方法,而是有更好的替代方法?

最佳答案

您可以覆盖 __str____repr__ 方法。

没有关于如何实现__str__方法的约定;它可以只返回您想要的任何人类可读的字符串表示形式。然而,关于如何实现 __repr__ 方法有一个约定:它应该返回对象的字符串表示,以便可以从该表示重新创建对象(如果可能),即 eval(repr(obj)) == obj.

假设你有一个类 Point__str____repr__ 可以这样实现:

class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
return "(%.2f, %.2f)" % (self.x, self.y)
def __repr__(self):
return "Point(x=%r, y=%r)" % (self.x, self.y)
def __eq__(self, other):
return isinstance(other, Point) and self.x == other.x and self.y == other.y

例子:

>>> p = Point(0.1234, 5.6789)
>>> str(p)
'(0.12, 5.68)'
>>> "The point is %s" % p # this will call str
'The point is (0.12, 5.68)'
>>> repr(p)
'Point(x=0.1234, y=5.6789)'
>>> p # echoing p in the interactive shell calls repr internally
Point(x=0.1234, y=5.6789)
>>> eval(repr(p)) # this echos the repr of the new point created by eval
Point(x=0.1234, y=5.6789)
>>> type(eval(repr(p)))
<class '__main__.Point'>
>>> eval(repr(p)) == p
True

关于python - 在 python 中打印对象的约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13228939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com