2011-05-31 20 views

उत्तर

21

जब किसी ऑब्जेक्ट को अनुक्रमित किया जाता है, तो विशेष विधि __getitem__ ऑब्जेक्ट की कक्षा में पहली बार देखी जाती है। एक वर्ग स्वयं एक वस्तु है, और कक्षा का वर्ग आमतौर पर type होता है। तो एक वर्ग के लिए __getitem__ ओवरराइड करने के लिए, आप अपनी metaclass को फिर से परिभाषित कर सकते हैं (यह type का एक उपवर्ग बनाने के लिए):

class MetaA(type): 
    def __getitem__(cls,val): 
     return "It works" 

class A(object): 
    __metaclass__=MetaA 
    pass 

print(A[0]) 
# It works 

python3 में metaclass इस तरह से निर्दिष्ट किया जाता है:

class A(object, metaclass=MetaA): 
    pass 
+0

अच्छा और मीठा :) – Woltan

+0

py3 में यह –

+1

@ups नहीं है: मेटाक्लास को पायथन 3 में एक अलग तरीके से निर्दिष्ट किया गया है। मैंने यह दिखाने के लिए कोड जोड़ा है कि ऊपर, कैसे। – unutbu

संबंधित मुद्दे