2016-01-23 16 views
6

So che è possibile sovraccaricare il comportamento delle istanze di una classe, ad es. -È possibile sovraccaricare il comportamento dell'oggetto di classe

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

possiamo cambiare il risultato di print s:

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

Possiamo cambiare il risultato di print Sample?

risposta

5

È possibile utilizzare un metaclass:

class SampleMeta(type): 
    def __str__(cls): 
     return ' I am a Sample class.' 

Python 3:

class Sample(metaclass=SampleMeta): 
    pass 

Python 2:

class Sample(object): 
    __metaclass__ = SampleMeta 

uscita:

I am a Sample class. 

Un metaclasse è la classe di classe. La sua relazione con una classe è analoga a quella di una classe a un'istanza. Viene utilizzata la stessa istruzione class. Eredita forma type invece da object ne fa un metaclasse. Per convenzione, self è sostituito da cls.

Problemi correlati