2011-02-08 41 views

回答

173

在類的元類中實現__str__()__repr__()

class MC(type): 
    def __repr__(self): 
    return 'Wahaha!' 

class C(object): 
    __metaclass__ = MC 

print C 

使用__str__,如果你說的是可讀的字串,使用__repr__的明確表示。

14
class foo(object): 
    def __str__(self): 
     return "representation" 
    def __unicode__(self): 
     return u"representation" 
+4

這並不能解決我的問題。試試我提供的代碼。 – 2011-02-08 11:32:11

+8

這改變了類的「實例」的字符串表示,而不是類本身。 – tauran 2011-02-08 11:39:23

+0

對不起,沒有看到您的帖子的第二部分。使用上面的方法。 – 2011-02-08 11:43:41

1

如果您必須在__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) 
相關問題