2016-01-23 58 views
6

我知道我們可以重載類實例的行爲,例如, -我們是否可以重載類對象的行爲

class Sample(object): pass 
s = Sample() 
print s 
<__main__.Sample object at 0x026277D0> 
print Sample 
<class '__main__.Sample'> 

我們可以改變的print s結果:

class Sample(object): 
    def __str__(self): 
    return "Instance of Sample" 
s = Sample() 
print s 
Instance of Sample 

我們可以改變的print Sample結果呢?

回答

5

您可以使用metaclass

​​3210

的Python 3:

class Sample(metaclass=SampleMeta): 
    pass 

的Python 2:

class Sample(object): 
    __metaclass__ = SampleMeta 

輸出:

I am a Sample class. 

元類是類的類。它與類的關係類似於類到實例的關係。使用相同的class語句。繼承type而不是object使其成爲元類。按照慣例selfcls代替。

相關問題