考慮這個類:如何爲類對象創建自定義字符串表示形式?
class foo(object):
pass
的默認字符串表示看起來是這樣的:
>>> str(foo)
"<class '__main__.foo'>"
我怎樣才能讓這顯示自定義字符串?
考慮這個類:如何爲類對象創建自定義字符串表示形式?
class foo(object):
pass
的默認字符串表示看起來是這樣的:
>>> str(foo)
"<class '__main__.foo'>"
我怎樣才能讓這顯示自定義字符串?
在類的元類中實現__str__()
或__repr__()
。
class MC(type):
def __repr__(self):
return 'Wahaha!'
class C(object):
__metaclass__ = MC
print C
使用__str__
,如果你說的是可讀的字串,使用__repr__
的明確表示。
class foo(object):
def __str__(self):
return "representation"
def __unicode__(self):
return u"representation"
如果您必須在__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 "x: {0}, y: {1}, z: {2}".format(self.x, self.y, self.z)
def __str__(self):
return "Vector3([{0},{1},{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) #Vector(x:1, y:2, z:3)
這並不能解決我的問題。試試我提供的代碼。 – 2011-02-08 11:32:11
這改變了類的「實例」的字符串表示,而不是類本身。 – tauran 2011-02-08 11:39:23
對不起,沒有看到您的帖子的第二部分。使用上面的方法。 – 2011-02-08 11:43:41