पायथन में [] ऑपरेटर को कैसे ओवरराइड करना है?


225

[]पायथन में एक वर्ग के लिए ऑपरेटर (सबस्क्रिप्ट नोटेशन) को ओवरराइड करने की विधि का नाम क्या है ?

जवाबों:


290

आपको __getitem__विधि का उपयोग करने की आवश्यकता है ।

class MyClass:
    def __getitem__(self, key):
        return key * 2

myobj = MyClass()
myobj[3] #Output: 6

और यदि आप मान सेट करने जा रहे हैं, तो आपको __setitem__विधि को लागू करने की आवश्यकता होगी , अन्यथा यह होगा:

>>> myobj[5] = 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: MyClass instance has no attribute '__setitem__'

63

इसे पूरी तरह से अधिभारित करने के लिए आपको __setitem__और __delitem__विधियों को लागू करने की भी आवश्यकता है ।

संपादित करें

मैं लगभग भूल गया ... यदि आप पूरी तरह से एक सूची का अनुकरण करना चाहते हैं, तो आपको भी आवश्यकता है __getslice__, __setslice__ and __delslice__

Http://docs.python.org/reference/datamodel.html में सभी दस्तावेज हैं


67
__getslice__, __setslice__` और __delslice__' have been deprecated for the last few releases of ver 2.x (not sure exactly when), and are no longer supported in ver 3.x. Instead, use __getitem__ . __setitem__` और __delitem__' and test if the argument is of type स्लाइस , i.e.: यदि आइंस्टीन (arg, स्लाइस): ...
डॉन ओ'डॉनेल

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.