考虑这个类:
class foo(object):
pass
默认的字符串表示如下所示:
>>> str(foo)
"<class '__main__.foo'>"
如何才能使其显示为自定义字符串?
发布于 2011-02-08 19:30:44
在类的元类中实现__str__()
或__repr__()
。
class MC(type):
def __repr__(self):
return 'Wahaha!'
class C(object):
__metaclass__ = MC
print(C)
如果你指的是一种可读的字符串化,请使用__str__
,对于明确的表示使用__repr__
。
发布于 2011-02-08 19:30:28
class foo(object):
def __str__(self):
return "representation"
def __unicode__(self):
return u"representation"
发布于 2018-01-12 16:52:14
如果必须在__repr__
或__str__
之间进行选择,请选择第一个,因为在默认情况下,实现__str__
会在未定义__repr__
时调用它。
自定义Vector3示例:
class Vector3(object):
def __init__(self, args):
self.x = args[0]
self.y = args[1]
self.z = args[2]
def __repr__(self):
return "Vector3([{0},{1},{2}])".format(self.x, self.y, self.z)
def __str__(self):
return "x: {0}, y: {1}, z: {2}".format(self.x, self.y, self.z)
在本例中,repr
再次返回一个可以直接使用/执行的字符串,而str
更适合作为调试输出。
v = Vector3([1,2,3])
print repr(v) #Vector3([1,2,3])
print str(v) #x:1, y:2, z:3
https://stackoverflow.com/questions/4932438
复制相似问题