2016-01-23 18 views
6

Bir sınıfın örneklerinin davranışını aşırı yükleyebileceğimizi biliyorum, ör.Sınıf nesnesinin davranışını aşırı yükleyebilir miyiz?

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

biz print Sample sonucunu değiştirebilir miyim: -

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

Biz print s sonucunu değiştirebilir?

cevap

5

kullanabilirsiniz bir 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 

Çıktı:

I am a Sample class. 

Bir meta sınıfı, sınıfın sınıfıdır. Bir sınıfla ilişkisi bir sınıfın örneğine benzemektedir. Aynı class ifadesi kullanıldı. type devralma formu yerine object, onu bir metaclass yapar. Sözleşmeyle self, cls ile değiştirilir.

İlgili konular