2016-12-07 29 views
1

讓我打一個比方:更改類的字符串表示本身

class Test: 
    def __repr__(self): 
     return "hi" 

這改變Test類型對象的字符串表示,但不是Test本身:

print(Test) 
--> "<class 'Test'>" 

是它有可能覆蓋類本身的字符串表示呢?

+1

有趣!我可以問你,你爲什麼需要這個? –

+0

我使用解析的C頭文件生成ctypes.Structure實例。很高興看到生成的類型內有什麼。 – Stefan

回答

3

你需要使用元類:

class Meta(type): 
    def __repr__(self): 
     return "hi" 

class Test(metaclass=Meta): 
    pass 

print(Test) 
>>> hi 

__repr__方法適用於情況下不類。然而在python中,類本身就是元類type的「實例」。因此,如果您使用自定義__repr__方法創建自定義元類,則使用元類創建的所有類都將使用您的__repr__方法。

更多閱讀meta classes